9

PCRE と同様に、Unicode 文字を一致させる必要があり\p{L}ます。

現在、Dart の RegExp クラスは ECMAScript のクラスに基づいているため\p{L}、悲しいことに の概念がありません。

おそらく、すべての Unicode 文字に一致する大きな文字クラスを構築することを検討していますが、どこから始めればよいかわかりません。

だから、私は次のような文字を一致させたい:

foobar
מכון ראות

ただし、R 記号は一致するべきではありません。

BlackBerry®

ASCII 制御文字や句読点なども使用しないでください。基本的に、Unicode がサポートするすべての言語のすべての文字は、それが å、ä、φ、または ת であるかどうかに関係なく、実際の文字であれば一致する必要があります。

4

4 に答える 4

7

私はこれが古い質問であることを知っています。ただし、 Unicode カテゴリRegExpをサポートするようになったので (Dart 2.4 以降)、次のようなことができます。

RegExp alpha = RegExp(r'\p{Letter}', unicode: true);
print(alpha.hasMatch("f")); // true
print(alpha.hasMatch("ת")); // true
print(alpha.hasMatch("®")); // false
于 2019-12-02T02:23:17.607 に答える
3

Unicode文字の文字または非文字としての分類に関する完全な情報は、Dartライブラリのどこにもないと思います。Intlライブラリ、特にBidiにあるものを使用して、ほとんどが機能するものをまとめることができる場合があります。たとえば、私はそれを考えています。

isLetter(oneCharacterString)=> Bidi.endsWithLtr(oneLetterString)|| Bidi.endsWithRTL(oneLetterString);

もっともらしい仕事をするかもしれません。少なくとも、そこには有効な文字の範囲がいくつかあるようです。または、_LTR_CHARSと_RTL_CHARSの情報に基づいて独自の正規表現をまとめることもできます。100%正確ではありませんが、ほとんどの実用的な目的には適していると明示的に述べています。

于 2013-03-21T17:28:17.607 に答える
2

DartまたはJSではまだこれをサポートしていません。

Xregexp JSライブラリは、このようなものをサポートするためにかなり大きな文字クラスの正規表現を生成するためのサポートを備えています。正規表現を生成して印刷し、切り取ってアプリに貼り付けることができる場合があります。

于 2013-03-21T21:28:36.130 に答える
2

文字列内のルーンを反復処理し、整数値を Unicode 範囲のテーブルと照合する必要があるようです。

Golang には、これらのテーブルをUnicode ソースから直接生成するためのコードがいくつかあります。maketables.go、および golang unicode パッケージ内の他のファイルのいくつかを参照してください。

または、怠惰なオプションを取り、Dart バグを報告して、Dart チームがそれを実装するのを待ちます;)

于 2013-03-21T04:18:43.077 に答える