ホームページ >Java >&#&チュートリアル >\w と \b に相当するものを使用して Java 正規表現で Unicode 文字を処理する方法

\w と \b に相当するものを使用して Java 正規表現で Unicode 文字を処理する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 08:42:10214ブラウズ

How to Handle Unicode Characters in Java Regular Expressions Using w and b Equivalents?

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

Java の Perl スタイルの文字クラス ショートカット (w、b、s) の実装、など)は ASCII 文字に限定されます。 Unicode 文字を正しく照合するには、これらのショートカットを書き換えるより良い方法が必要です。

解決策:

カスタム関数を使用して、次の文字クラス エスケープを書き換えます。

\w \W \s \S \v \V \h \H \d \D \b \B \X \R

書き直されました定義:

\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\u2001-\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 => (?:(?<=[a-z0-9])(?![a-z0-9])|(?<![a-z0-9])(?=[a-z0-9]))
\B => (?:(?<=[a-z0-9])(?=[a-z0-9])|(?<![a-z0-9])(?![a-z0-9]))

\d => \p{Nd}
\D => \P{Nd}

\R => (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])

\X => (?>\PM\pM*)

境界に関する考慮事項:

Java の b と B は、w だけにバインドされているわけではありません。 A(?:AB|BC) 構造を使用して書き換えられた b は、次の境界を検索できます。

  • IF が word ==> の後に続く。 THEN は単語の前にありません
  • ELSIF は単語の後にありません ==> THEN は word の前にあります

A(?:BC|AB) 構造を使用して書き換えられた B は、非境界を検索できます。

  • IF は word の後に続きます ==> THEN は word の前にあります
  • ELSIF は word ==> の後にありません。 THEN は単語の前にありません

完全な書き換え関数:

ソース コードを取得して、上記の完全な書き換え関数を取得します。

追加機能:

  • 論理コードポイントでの Unicode 文字入力
  • 自然言語の単語、ダッシュ、ハイフン、およびアポストロフィの便利な定義
  • 正規表現の拡張文字列エスケープのエスケープとエスケープ解除

以上が\w と \b に相当するものを使用して Java 正規表現で Unicode 文字を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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