Answers:
元字符\b
是锚号,例如插入号和美元符号。它在称为“单词边界”的位置匹配。此匹配为零长度。
有三个不同的位置可以作为单词边界:
简而言之:\b
允许您使用形式的正则表达式执行“仅全词”搜索\bword\b
。阿“字字符”是可用于形成字的字符。不是“单词字符”的所有字符都是“非单词字符”。
在所有口味中,字符[a-zA-Z0-9_]
都是文字字符。这些也与速记字符类匹配\w
。在风味比较中显示单词边界的“ ascii”的风味仅将这些识别为单词字符。
\w
通常代表“文字字符”[A-Za-z0-9_]
。请注意包含下划线和数字。
\B
是的否定版本\b
。\B
在每个\b
不匹配的位置进行匹配。有效地,\B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\W
是[^\w]
的否定版本\w
。
@Mahender,您可能是说\W
(而不是\w
)和之间的区别\b
。如果没有,那么我会同意上面的@BoltClock和@jwismar。否则继续阅读。
\W
会匹配任何非单词字符,因此很容易尝试使用它来匹配单词边界。问题在于它与行的开头或结尾不匹配。\b
更适合匹配单词边界,因为它也匹配行的开头或结尾。粗略地说(经验丰富的用户可以在这里纠正我)\b
是(\W|^|$)
。[编辑:如下@Ωmega所述,它\b
是一个零长度的匹配,因此(\W|^|$)
严格意义上来说并不是正确的,但希望可以帮助解释差异。
快速示例:对于字符串Hello World
,.+\W
将匹配Hello_
(与空格)但不匹配World
。.+\b
将同时匹配Hello
和World
。
\b
对我来说,含义与(?<=\W|^|$)
在模式之前使用和(?=\W|^|$)
在模式之后使用时相同。您可以在这里查看我在说什么=> regexr.com/3qf9h。只需\b
在此处与锚点的结果进行比较=> regexr.com/3qf9t
\b <= this is a word boundary.
在以下位置匹配:后跟一个单词字符但不带一个单词字符,或者后接一个单词字符但不带一个单词字符。
\w <= stands for "word character".
它始终与ASCII字符[A-Za-z0-9_]匹配
您要匹配的内容是否具体?
一些对初学者有用的正则表达式网站,或者只是为了让您食欲大增。
我发现这是一本非常有用的书:
\w
它并不总是等同于ASCII字符[A-Za-z0-9_]
-它也将匹配字母数字Unicode代码点,并且如果适当地设置了语言环境,则可能会匹配8位ISO-Latin-1字符。 。
\w
是不是一个单词边界,它的任何单词字符,包括下划线匹配:[a-zA-Z0-9_]
。\b
是单词边界,也就是说,它与单词和非字母数字字符之间的位置匹配:\W
或[^\w]
。
这些实现可能因语言而异。
\w
代表一个单词字符,而\b
代表一个单词字符和一个非单词字符之间的单词边界。他们不是一回事。