# 课程 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:非捕获组 →