为什么在\ s匹配正则表达式中的字符串边界时引入\ b?

时间:2012-11-14 13:04:25

标签: regex

我看到有\b我从未使用过,我想知道是否有人可以在没有\b的情况下给我用例。

3 个答案:

答案 0 :(得分:6)

  

我想知道是否有人可以在没有\ b。

的情况下给我用例

表达式\b只是你已经可以用其他结构做的一种方便的简写。

例如,如果您的正则表达式引擎具有外观,那么\b等同于以下更长的表达式:

(?<=\w)(?!\w)|(?<!\w)(?=\w)

同样,\w\d等只是使用字符类可以完成的简写,例如[A-Za-z0-9_][0-9]。您通常希望使用简短版本,因为每次写出完整定义都很麻烦,难以阅读并增加了出错的风险。

答案 1 :(得分:2)

它们匹配不同的内容 - \s匹配空白,\b匹配字边界。

一个很好的例子是角色.

在字符串hello.hi中:

\s.不匹配,但\b会在之前和之后匹配。

答案 2 :(得分:2)

它们完全不同。

\s是“空格字符”。这意味着它是包含空格字符(如\t, \r, \n或空格)的预定义字符类的快捷方式。 \s匹配其中一个字符。

\b是“字边界”。它是零宽度断言,与预定义的字符类\w相关。零宽度断言意味着它的宽度为0,即它与字符不匹配。它确实匹配一个满足断言的位置。这里的断言在一侧是单词字符,在另一侧是非单词字符。 Mark provided already the long version of \bOded an example where \b would match

\w是“字符”,表示它包含[a-zA-Z0-9_]之类的内容。在某些语言中,它基于Unicode并包含所有字母。