\ w和\ b正则expression式元字符之间的区别
任何人都可以解释\ w和\ b正则expression式元字符之间的区别吗? 这两个元字符都用于单词边界。 除此之外,哪个元字符对多语言内容有效?
元字符\b
是一个像插入符号和美元符号的锚。 它匹配一个被称为“文字边界”的位置 。 这场比赛是零长度。
有三种不同的立场可以作为单词的边界:
- 在string中的第一个字符之前,如果第一个字符是单词字符。
- 在string中的最后一个字符之后,如果最后一个字符是一个单词字符。
- string中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
简单地说: \b
允许您使用\bword\b
forms的正则expression式来执行“仅完整字词”search。 “单词字符”是可以用于形成单词的字符。 所有不是“单词字符”的字符都是“非单词字符” 。
在所有的口味中,字符[a-zA-Z0-9_]
都是单词字符。 这些也与短手人物类\w
相匹配。 在风味比较中显示单词边界的“ascii”风味仅将这些识别为单词字符。
\w
代表“单词字符” ,通常是[A-Za-z0-9_]
。 注意包含下划线和数字。
\B
是\b
的否定版本。 \B
匹配\b
没有的每个位置。 有效地, \B
匹配两个单词字符之间的任何位置以及两个非单词字符之间的任何位置。
\W
是[^\w]
的否定版本[^\w]
简写。
\w
匹配单词字符。 \b
是匹配一个零宽度的匹配,匹配一个单词字符的位置字符,另一个不是单词字符。 (不是单词字符的例子包括空格,string的开始和结尾等)
\w
匹配"abc def"
中的a
, b
, c
, d
, e
和f
,
\b
匹配\b
之前, 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|^|$)
不是严格正确的,但希望可以帮助解释差异]
快速示例:对于stringHello World
, .+\W
将与Hello_
(与空格)匹配,但不匹配World
。 .+\b
会匹配Hello
和World
。
\b <= this is a word boundary.
在单词字符后面跟一个位置匹配,但前面没有单词字符,或者前面是单词字符,后面跟着单词字符。
\w <= stands for "word character".
它总是匹配ASCII字符[A-Za-z0-9_]
有什么具体的你想要匹配?
一些有用的正则expression式网站初学者或只是为了弄湿你的胃口。
- 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
我发现这是一本非常有用的书:
- 掌握Jeffrey EF Friedl的正则expression式
\w
不是单词边界,它匹配任何单词字符,包括下划线: [a-zA-Z0-9_]
。 \b
是一个字边界,即匹配一个字和一个非字母数字字符之间的位置: \W
或[^\w]
。
尽pipe这些实现可能因语言而异。