【正則表達式】前瞻,后顧,負前瞻,負后顧


舉個例子:

有個字符串

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|


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM