断言分四种:
- 先行断言
X(?=Y)
,也叫 零宽度正预测先行断言,当X的右边是Y时匹配成功; - 后发断言
(<=Y)X
,也叫 零宽度正回顾后发断言,当X的左边是Y时匹配成功; - 负向零宽度先行断言
X(?!Y)
,当X的右边不是Y时匹配成功; - 负向零宽后发断言
(?<!Y) X
,当X的左边不是Y时匹配成功;
比如,‘Win(?=2000)’ 匹配 Win2000, 但不匹配 WinXP。
XX预测断言,在右边;“预测”总是和“先行”成对出现;
XX回顾断言,在左边;“回顾”总是和“后发”成对出现;
$ cat foo | grep -P win
win200
winxp
200win
95win
200win95
$ cat foo | grep -P 'win(?=2)'
win200
$ cat foo |