,它匹配adi
g。假如你想要给一个很长的数字中每三位间加一个逗号当然是从右边加起了,你可以这样查找需要在前面和里面添加逗号的部分:dd3b,用它对1234567890进行查找时结果是234567890。下面这个例子同时使用了这两种断言:sds匹配以空白符间隔的数字再次强调,不包括这些空白符。r
负向零宽断言r
前面我们提到过怎么查找不是某个字符或不在某个字符类里不是某个字符或不在某个字符类里的字符的方法反义。不是某个字符或不在某个字符类里但是如果我们只是想要确保某个字符没有出现,确保某个字符没有出现,确保某个字符没有出现但并不想去匹配它时怎么办?例如,但并不想去匹配它如果我们想查找这样的单词它里面出现了字母q但是q后面跟的不是字母u我们可以尝试这样:bwquwb匹配包含后面不是字母u的字母q的单词。但是如果多做测后面不是字母试或者你思维足够敏锐,直接就观察出来了,你会发现,如果q出现在单词的结尾的话,IraqBe
q,像这个表达式就会出错。这是因为u总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的u将会匹配q后面的单词分隔符可能是空格,或者是句号或其它的什么,后面的wb将会匹配下一个单词,于是bwquwb就能匹配整个Iraqfighti
g。负向零宽断言负向零宽断言能解决这样的负向零宽断言问题,因为它只匹配一个位置,并不消费消费任何字符。现在,我们可以这样来解决这消费个问题:bwquwb。零宽度负预测先行断言exp,断言此位置的后面不能匹配表达式exp。例如:零宽度负预测先行断言d3d匹配三位数字,而且这三位数字的后面不能是数字;babcwb匹配不包含连续字符串abc的单词。同理,我们可以用exp零宽度正回顾后发断言零宽度正回顾后发断言来断言此位置的前面不能匹配零宽度正回顾后发断言表达式exp:azd7匹配前面不是小写字母的七位数字。r
一个更复杂的例子:w1匹配不包含属性的简单HTML标签内里的内容。w指定了这样的前缀被尖括号括起来的单词比如可前缀:前缀能是,然后是任意的字符串最后是一个后缀后缀1。注意后缀里后缀的,它用到了前面提过的字符转义;1则是一个反向引用,引用的正是捕获的第一组,前面的w匹配的内容,这样如果前缀实际上是的话,后缀就是了。整个表达式匹配的是和之间的内容再次提醒,不包括前缀和后缀本身。r
注释r
小括号的另一种用途是r