首页 > Java > java教程 > 正则表达式中 Java 的 \w 和 \b 的 Unicode 等效项是什么?

正则表达式中 Java 的 \w 和 \b 的 Unicode 等效项是什么?

DDD
发布: 2024-12-13 14:55:14
原创
494 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板