regex 如何在特殊字符周围使用\B边界[重复]

eni9jsuy  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(117)

此问题在此处已有答案

Word boundary with words starting or ending with special characters gives unexpected results(2个答案)
What is a word boundary in regex?(13个回答)
三年前就关门了。
社区在7天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
\b✅\b donotmatch a single emoji:''.
\b\u2B07\b donotmatch:'不匹配'.
\B-\B**不匹配“-”。
\bfoo\b肯定匹配'foo'。
为什么会发生这种情况,有什么替代方法可以确保我的表情符号或任何特殊字符不在字符串中间
Playground:https://regex101.com/r/jRaQuJ/2

4smxwvx5

4smxwvx51#

你可以使用模式:

(?<!\w)✅(?!\w)

字符串
这使用负面的lookarounds来匹配两边都没有单词字符的emoji。
您询问的匹配的原因是\b是一个零宽度边界,边界的一侧是\w(单词字符,或[0-9A-Za-z_]),另一侧是字符串的开头或结尾或\W(非单词字符)。
例如,考虑字符串"foo."

start of string boundary (zero width)
     |
     |   non-word character
     |   |
     v   v
      foo.
      ^ ^
      | |
word characters


\b边界可以在正则表达式\bfoo\b中使用,并且由于o.字符之间的边界以及字符串开头和字符f之间的边界,可以找到匹配。
"foobar"不匹配\bfoo\b,因为第二个ob不满足边界条件,也就是说,b不是非单词字符或字符串的结尾。
模式\b-\b与字符串"-"不匹配,因为"-"不是单词字符。同样,表情符号是由非单词字符构建的,因此它们不会像\bfoo\b那样响应单词字符的边界。

相关问题