现在我正在学习 Java 上的正则表达式,我对单词边界有疑问。因此,当我在 Java 正则表达式上查找单词边界时,我得到了这个 \b 接受以非单词字符为边界的单词,所以这个正则表达式
\b123\b
将接受这个字符串123 456
但会拒绝456123456
。现在我发现像这个词这样的条件!$@#@%123^^%$#
还是"123"
被上面的正则表达式接受了。是否有任何单词边界/模式拒绝像上面的示例那样以非字母数字(空格除外)为边界的单词?
问问题
340 次
2 回答
1
您想使用\s
而不是\b
. 这将寻找一个空白字符而不是一个单词边界。
但是,如果您希望您的第一个示例123 456
匹配,那么您还需要使用锚点123
在字符串的立即开始或结束处接受。这可以通过(\s|^)123(\s|$)
. 克拉^
匹配字符串的开头并$
匹配字符串的结尾。
于 2013-03-10T08:06:55.407 回答
1
(?<!\S)123(?!\S)
(?<!\S)
匹配前面没有非空白字符的位置。(消极的后视)
(?!\S)
匹配后面没有非空白字符的位置。(负前瞻)
我知道这看起来很复杂,但那是因为\b
隐藏了很多复杂性。这相当于:
(?<=\w)(?!\w)|(?=\w)(?<!\w)
...表示前面有一个单词字符但后面没有一个的位置,或者后面有一个单词字符但前面没有一个的位置。
于 2013-03-10T08:52:15.223 回答