首頁 > Java > java教程 > 正規表示式中 Java 的 \w 和 \b 的 Unicode 等效項是什麼?

正規表示式中 Java 的 \w 和 \b 的 Unicode 等效項是什麼?

DDD
發布: 2024-12-13 14:55:14
原創
496 人瀏覽過

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))
登入後複製

在Java 中加入Unicode 支援

至將這些Unicode等效項合併到 Java 正規表示式中,您可以在編譯之前使用字串重寫函數來轉換模式。以下是使用名為 rewrite 的自訂函數的範例:

String rewrittenPattern = rewrite(originalPattern);
Pattern compiledPattern = Pattern.compile(rewrittenPattern);
登入後複製

以上是正規表示式中 Java 的 \w 和 \b 的 Unicode 等效項是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板