举个例子:
有个字符串
str = "博客园 顾客 博客 客园"
我们想匹配字符串里"博客园"的"客"字而不要其他的"客"字,这时就需要用到前瞻后顾。
正则表达式如下:
(?<=博)客(?=园)
反过来,我们不想要"博客园"的"客"字,但是想要其他"客"字。这时就要用到负前瞻,负后顾
正则表达式如下:
(?
总结一下:
前瞻: exp1(?=exp2) 查找exp2前面的exp1
后顾: (?<=exp2)exp1 查找exp2后面的exp1
负前瞻: exp1(?=exp2) 查找后面不是exp2的exp1
负后顾: (?<=exp2)exp1 查找前面不是exp2的exp1
可以发现,负前瞻、负后顾就是把前瞻、后顾中的"="改成了"!"
注意:后顾功能在大多数语言中有长度限制,只能使用定长的表达式,像\w+和\d 这样的表达式长度可变,不能用在后顾中
一个复杂一点的例子:
str = "data: '|12 34 56 78 90|', data: '|12|3456|7890|', data: '|12|', data: '1234567890', data: '|1234|' "
我们要匹配data后面有||的部分,要求里面没有空格没有|并且长度大于2
(?<=data: ')\|[^ \|]{2,}?\|(?=')
可以匹配到 |1234|