舉個例子:
有個字符串
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|