0

现在我正在学习 Java 上的正则表达式,我对单词边界有疑问。因此,当我在 Java 正则表达式上查找单词边界时,我得到了这个 \b 接受以非单词字符为边界的单词,所以这个正则表达式 \b123\b 将接受这个字符串123 456但会拒绝456123456。现在我发现像这个词这样的条件!$@#@%123^^%$#还是"123"被上面的正则表达式接受了。是否有任何单词边界/模式拒绝像上面的示例那样以非字母数字(空格除外)为边界的单词?

4

2 回答 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 回答