我正在学习正则表达式并与\b
混淆或定义了单词边界。
我知道\d
等于[0-9]
且\D
等于[^0-9]
,
\w
等于[a-zA-Z0-9]
且\W
等于[^a-zA-Z0-9]
。
我尝试了很多不同的组合来制作\b
的等效组合,但没有成功。
我的问题是,我们能否相当于\b
?请提供简单的解释。
答案 0 :(得分:3)
您有几种选择:
选项1:使用正面和负面外观
(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))
请参阅demo。
选项2:仅使用正面看法
(?:(?<=\W|^)(?=\w)|(?<=\w)(?=\W|$))
请参阅demo。
仅测试以下字符是\W
(例如)是不够的,因为(?=\W)
的另一个答案建议,因为\W
必须与字符匹配,但是{{ 1}}在字符串的开头或结尾处起作用,其中没有要匹配的字符。为了解决这个问题,选项2中的正则表达式引入了字符串断言\b
和^
答案 1 :(得分:1)
\ b:
的未经测试的等效项(?<=\\w)(?=\\W)|(?<=\\W)(?=\\w)
这些是零宽度正面后视和前瞻断言。这是在单词边界上发生的事情。