# 课程 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
解决上述任务以继续下一个问题,或者查看答案
练习 A2-4:只匹配第一行的 "happy"
Task Text Result
match happy
skip unhappy
解决上述任务以继续下一个问题,或者查看答案