什么是Java中的单词边界元字符?

时间:2014-07-05 13:50:53

标签: java regex

我正在学习正则表达式并与\b混淆或定义了单词边界。

我知道\d等于[0-9]\D等于[^0-9]\w等于[a-zA-Z0-9]\W等于[^a-zA-Z0-9]

我尝试了很多不同的组合来制作\b的等效组合,但没有成功。

我的问题是,我们能否相当于\b?请提供简单的解释。

2 个答案:

答案 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)

这些是零宽度正面后视和前瞻断言。这是在单词边界上发生的事情。

相关问题