关于 Unicode 正则表达式中的 \b{w} 语法

3

RL2.2UTS #18中描述了Unicode正则表达式中扩展字形簇单词边界语法\b{w},但我不太理解它与\b语法的区别。在UTS #18中,它说:

\b{w}. Unicode单词边界。请注意,这与\b本身不同,后者对应于\w\W。请参阅附录C:兼容性属性。

那么这两种语法之间的区别到底是什么?

1个回答

3
\b == \w\W

\W = [^A-Za-z0-9_]表示只处理ASCII字母数字,而\b{w}则处理UNICODE字符集(即更广泛的字母数字集)。

您可以在此处模拟\b{w}的示例,并将其与通常行为进行比较。


嗨@Amadan,看起来你的例子与Thomas的答案相反?在他的答案中,似乎\b{w}会处理Unicode,因此它将匹配ä - Xiangyu.Wu
1
我刚才写错了,现在应该是正确的。p 是一个单词字符,但 ä 不是,所以 \b 在它们之间匹配。两者都是 Unicode 单词字符,因此它们之间没有 Unicode 单词边界,所以 \b{w} 无法匹配。 - Amadan
此外,\b\b{w} 是否会包含在匹配结果中?在 的例子中,似乎 \b 会匹配 p,因为在 p 后面语言发生了变化,所以 p 实际上是一个单词边界? - Xiangyu.Wu
1
@Xiangyu.Wu \b 的行为类似于环视,它是一个零宽度断言。 - Thomas Ayoub
1
据我所知,pcre确实具有在Unicode边界上匹配的能力,但它不支持这种语法:在我所知道的所有引擎中,\b{w}将匹配单词字符后面的三个字符{w} - Amadan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接