最新の正規表現の実装の多くは、\w
「任意の文字、数字、または接続句読点」としての文字クラスの略記(通常:アンダースコア)。そうすれば、\w+
は、hello
、élève
、GOÄ_432
または gefräßig
。
残念ながら、Javaはそうではありません。Javaでは、\w
は[A-Za-z0-9_]
。これにより、他の問題の中でも、上記のような単語のマッチングが困難になります。
また、\b
単語区切り文字は、そうすべきでない場所で一致します。
.NETのような、Unicode対応の\w
または \b
Javaで? Unicodeに対応するために「書き換え」が必要なショートカットは他にありますか?
\w
が機能しないのは本当に残念です。提案されたソリューション\p{Alpha}
も私には機能しません。
[\p{L}]
はすべてのUnicode文字をキャッチするようです。したがって、\w
に相当するUnicodeは[\p{L}\p{Digit}_]
でなければなりません。
Javaでは、_\w
_および_\d
_はUnicodeに対応していません。 ASCII文字、_[A-Za-z0-9_]
_および_[0-9]
_のみに一致します。同じことが_\p{Alpha}
_と友人にも当てはまります(それらが基づいているPOSIXの「文字クラス」はロケールに依存するはずですが、JavaではASCII文字)。 Unicodeの「Word文字」と一致させる場合は、つづりを入力する必要があります。 _[\pL\p{Mn}\p{Nd}\p{Pc}]
_、文字、非スペーシング修飾子(アクセント)、10進数、および接続句読点。
ただし、Javaの_\b
_isUnicode-savvy; Character.isLetterOrDigit(ch)
を使用し、アクセント付きの文字もチェックしますが、認識する「接続句読点」文字はアンダースコアのみです。 EDIT:サンプルコードを試すと、_""
_と_élève"
_が本来のように出力されます( ideone.com )でご覧ください。