在2.1.1小节中,元字符/b、^、$都匹配一个位置,且这个位置满足一定的条件。在此,把满足这一个条件称为断言或零宽度断言。正则表达式中的常用零宽度断言明如表2-10所示。
表2-10 零宽度断言
字符(断言) |
说明 |
^ |
匹配行的开始位置。 |
$ |
匹配行的结束位置。 |
/A |
匹配必须出现在字符串的开头。 |
/Z |
匹配必须出现在字符串的结尾或字符串结尾处的/换行符号n之前。 |
/z |
匹配必须出现在字符串的结尾。 |
/G |
匹配必须出现在上一个匹配结束的地方。 |
/b |
匹配字符的开始或结束位置。 |
/B |
匹配不是在字符的开始或结束位置。 |
在表2-8中,表达式(?=experssion)、(?!experssion)、(?<=experssion)和(?<!experssion)都是匹配一个位置。下面将详细介绍表达式(?=experssion)和(?<=experssion)。
(?=experssion)又称为零宽度正预测先行断言,它断言自身位置的后面能够匹配表达式experssion。以下正则表达式匹配以字符串“ed”结尾的单词的前面部分,即匹配单词的除字符串“ed”之外的部分。
/b/w+(?=ed/b) (73)
(?<=experssion)又称为零宽度正回顾后发断言,它断言自身位置的前面能够匹配表达式experssion。以下正则表达式匹配以字符串“an”开头的单词的后面部分,即匹配单词的除字符串“an”之外的部分。
(?<=/ban)/w+/b (74)
使用工具Regex Tester分别测试正则表达式(73)和(74),结果分别如图和所示。