ホームページ >Java >&#&チュートリアル >正規表現における Java の \w と \b に相当する Unicode 対応のものは何ですか?

正規表現における Java の \w と \b に相当する Unicode 対応のものは何ですか?

DDD
DDDオリジナル
2024-12-13 14:55:14496ブラウズ

What are the Unicode-aware equivalents for Java's w and b in regular expressions?

Java 正規表現の w および b に相当する Unicode?

Java 正規表現では、他の正規表現と比べて文字クラスの短縮表現 (w および b) が制限されています最新の正規表現の実装。 Java では、w は [A-Za-z0-9_] のみに一致するため、単語の一致機能が制限されます。さらに、b の単語境界セマンティクスは、w と Unicode の定義の両方から逸脱しています。

Unicode 対応の同等物

幸いなことに、これらの制限を克服するために、カスタム Unicode 対応の同等物が開発されました。 。

\s: [\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]
\S: [^\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]

\v: [\u000A-\u000D\u0085\u2028\u2029]
\V: [^\u000A-\u000D\u0085\u2028\u2029]

\h: [\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]
\H: [^\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]

\w: [\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]]
\W: [^\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&&\p{So}]]

\b: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]]))
\B: (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics">&amp;&amp;\p{So}]]))

\d: \p{Nd}
\D: \P{Nd}

\R: (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])
\X: (?>\PM\pM*)

境界を理解する (b と B)

境界は、単語文字が単語文字以外の文字に遷移する位置、またはその逆の位置に一致します。境界は次のように定義されます:

IF follows word
THEN doesn't precede word
ELSIF doesn't follow word
THEN does precede word

正規表現構文に変換されます:

(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))

同様に、非境界 (B) と同等のものは次のようになります:

(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))

Unicode サポートの組み込みJava

これらの Unicode 相当物を Java 正規表現に組み込むには、文字列書き換え関数を使用して、コンパイル前にパターンを変換できます。以下は、rewrite というカスタム関数を使用した例です:

String rewrittenPattern = rewrite(originalPattern);
Pattern compiledPattern = Pattern.compile(rewrittenPattern);

以上が正規表現における Java の \w と \b に相当する Unicode 対応のものは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。