# 课程 A2:零宽断言
零宽断言用于指定要匹配的内容的前缀或后缀应该满足的约束条件,匹配到的内容并不包含这些前缀 / 后缀。“零宽”的含义是没有宽度、只匹配位置、不匹配内容;“断言”用来声明一个应该为真的事实,只有断言为真时正则表达式才会匹配。
下面是正则表达式中的四种零宽断言:
| 语法 | 作用 | 名称 |
|---|---|---|
(?=exp) | 指定后缀 | 零宽度正预测先行断言 zero-width positive lookahead assertion |
(?<=exp) | 指定前缀 | 零宽度正回顾后发断言 zero-width positive lookbehind assertion |
(?!exp) | 指定后缀不能是 | 零宽度负预测先行断言 zero-width negative lookahead assertion |
(?<!exp) | 指定前缀不能是 | 零宽度负回顾后发断言 zero-width negative lookbehind assertion |
例如,模式 \w+(?=ing) 会匹配所有以 ing 结尾的单词,模式 (?<=un)\w+ 会匹配所有以 un 开头的单词。注意:断言左右两侧的括号是必须的。
上面这四个语法可以这样理解:
=表示“是”、!表示“不是”<是一个向左的箭头,表示表达式的左面,也就是前缀
我们不需要记住每个语法的具体名称,只要知道怎么用就可以。请尝试完成下面的练习。
练习 A2-1:匹配后缀是 "ly" 的单词
| Task | Text | Result |
| skip | sad | |
| match | slightly | |
| match | hardly | |
| match | perfectly | |
| match | suddenly |
解决上述任务以继续下一个问题,或者查看答案。
练习 A2-2:匹配前缀是 "un" 的单词
| Task | Text | Result |
| skip | happy | |
| match | unfinished | |
| match | undoubted | |
| match | unused | |
| match | unhappy |
解决上述任务以继续下一个问题,或者查看答案。
练习 A2-3:只匹配前两行的 "re"
| Task | Text | Result |
| match | represents | |
| match | reclaim | |
| skip | regex | |
| skip | regular |
解决上述任务以继续下一个问题,或者查看答案。
← 课程 A1:反向引用 课程 A3:非捕获组 →