|
锚定不仅仅针对字符串的两头。词界锚定,\b,是针对单词使用的。如/\bfred\b/可以匹配上单词fred,但不能匹配frederick,
alfred, man fred mann。这同字处理软件中的“全字匹配(match whole words only)”是类似的。
◆某些正则表达式实现中开头的锚定和结尾锚定不同,但Perl 中均使用\b。
这些单词(words)不是你或者我通常认为的那样;它们是\w 类型,由通常的字母,数字,下划线组成。\b 将从开头或结尾
匹配这些\w 类型的字符。
图1中,每一个“词(word)”下面有灰线,箭头标明\b 匹配的地方。给定字符串总有偶数个词界,因为每一个词均有两
个界限(开始和结尾)。
词是字母,数字,下划线组成的序列。这种意义下的词可由/\w+/匹配上。下句中有5 个词:That,s,a,word,以及boundary◆。
词上的引号不会改变词界的位置;这些词是由\w 字符组成的。
图1 词界:\b
That’s a “word” boundary
◆这里你可以看到,我们为什么希望能改变“word”的定义,That’s 应当是一个单词,而不是两个单词,虽然中间有撇号(’)。即便是在通
常的英文文本中,上述看法也符合通常的观点,还能找到其它字符的些微差别。
每一个箭头指向下划线的开头和结尾处,因为词界锚定:\b 只匹配这样的词。
词界锚定是非常有用的,如果不希望cat 匹配上delicatessen,而dog 匹配上boondoggle,或者fish 匹配上selfishness。有时,
你只想要一个词界锚定,当使用/\bhunt/ 将匹配上像hunt, hunting, hunter,这样的单词,但不会匹配shunt,而/stone\b/将匹
配sandstone, flintstone,而不能匹配上capstones。
非词界锚定为\B。它将在任何非\b 匹配的点上进行匹配。因此,模式/\bsearch\B/将匹配searches, searching, searched, 但不能
匹配search,或者researching。 |
|