谁能解释\b
和\w
正则表达式元字符之间的区别?据我了解,这两个元字符都用于单词边界。除此之外,哪个元字符对于多语言内容有效?
元字符\b
是锚号,例如插入号和美元符号。它在称为“单词边界”的位置匹配。此匹配为零长度。
有三个不同的位置可以作为单词边界:
- 如果字符串中的第一个字符是单词字符,则在字符串中第一个字符之前。
- 如果字符串中的最后一个字符是单词字符,则在字符串的最后一个字符之后。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
简而言之:\b
允许您使用形式的正则表达式执行“仅全词”搜索\bword\b
。阿“字字符”是可用于形成字的字符。不是“单词字符”的所有字符都是“非单词字符”。
在所有口味中,字符[a-zA-Z0-9_]
都是文字字符。这些也与速记字符类匹配\w
。在风味比较中显示单词边界的“ ascii”的风味仅将这些识别为单词字符。
\w
通常代表“文字字符”[A-Za-z0-9_]
。请注意包含下划线和数字。
\B
是的否定版本\b
。\B
在每个\b
不匹配的位置进行匹配。有效地,\B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\W
是[^\w]
的否定版本\w
。
\w
匹配单词字符。\b
是零宽度的匹配项,匹配的是一侧有文字字符的位置字符,另一侧有文字字符的位置字符。(非单词字符的示例包括空格,字符串的开头和结尾等)。
\w
比赛a
,b
,c
,d
,e
,和f
在"abc def"
\b
比赛前的(零宽度)的位置a
,之后c
,前d
,后和f
在"abc def"
请参阅:http : //www.regular-expressions.info/reference.html/
@Mahender,您可能是说\W
(而不是\w
)和之间的区别\b
。如果没有,那么我会同意上面的@BoltClock和@jwismar。否则继续阅读。
\W
会匹配任何非单词字符,因此很容易尝试使用它来匹配单词边界。问题在于它与行的开头或结尾不匹配。\b
更适合匹配单词边界,因为它也匹配行的开头或结尾。粗略地说(经验丰富的用户可以在这里纠正我)\b
是(\W|^|$)
。[编辑:正如下面的@Ωmega所提到的,\b
它是零长度的匹配,因此(\W|^|$)
严格意义上来说并不是正确的,但希望有助于解释差异。
快速示例:对于字符串Hello World
,.+\W
将匹配Hello_
(与空格)但不匹配World
。.+\b
将同时匹配Hello
和World
。
\b <= this is a word boundary.
在以下位置匹配:后跟一个单词字符但不带一个单词字符,或者后接一个单词字符但不带一个单词字符。
\w <= stands for "word character".
它始终与ASCII字符[A-Za-z0-9_]匹配
您要匹配的内容是否具体?
一些对初学者有用的正则表达式网站,或者只是为了让您食欲大增。
- http://www.regular-expressions.info
- http://www.javascriptkit.com/javatutors/redev2.shtml
- http://www.virtuosimedia.com/dev/php/37-tested-php-perl-and-javascript-regular-expressions
- http://www.i-programmer.info/programming/javascript/4862-master-javascript-regular-expressions.html
我发现这是一本非常有用的书:
\w
是不是一个单词边界,它的任何单词字符,包括下划线匹配:[a-zA-Z0-9_]
。\b
是单词边界,也就是说,它与单词和非字母数字字符之间的位置匹配:\W
或[^\w]
。
这些实现可能因语言而异。
文章标签:java , javascript , perl , php , regex
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!