1

JavaでUnicodeテキストの正規表現を書いています。ただし、私が使用している特定のスクリプト(デーバナーガリー(0900〜097F))では、単語の境界に問題があります。\ bは、従属母音(093E-094Cなど)である文字と一致します。これらはスペース文字のように扱われるためです。

例:次の文字列があるとします。同様に最後の言葉で。これにより、\bは「कमाल」の「ल」を正規表現\b \ w \ bと一致させますが、これは言語によっては正しくありません。

この例がお役に立てば幸いです。

特定の文字と一致しないことを除いて、\ bのように動作する正規表現を記述できますか?フィードバックはありがたいです。

4

2 に答える 2

1

次の正規表現演算子を使用して、目的を達成できるはずです。

(?=X)   X, via zero-width positive lookahead
(?!X)   X, via zero-width negative lookahead
(?<=X)  X, via zero-width positive lookbehind
(?<!X)  X, via zero-width negative lookbehind

(上記は、Java 6パターンAPIドキュメントから引用されています。)

単語の前の (?<![foo])(?=[foo])代わりに、および単語の後の代わりに使用します。ここで、「」は「単語文字」のセットです。\b(?<=[foo])(?![foo])\b[foo]

于 2009-09-22T06:26:58.630 に答える
1

単語の境界に相当するもの(境界が期待したものでない場合)は次のようになります。

 (?<!=[x-y])(<?=[x-y])...(?<=[x-y])(?![x-y])

これは、「単語の境界」とは、「一方の側に文字があり、もう一方の側には文字がない場所」を意味するためです。

したがって、後読み式と先読み式を使用して、独自の文字クラス[xy]を定義し、「単語の境界」を分離するタイミングを確認できます。

于 2009-09-22T06:27:12.620 に答える