正則表達(dá)式斷言

需求

在使用正則表達(dá)式做白名單的過程中,碰到下面的需求

匹配http://www.example.com 底下所有除了http://www.example.com/user/開頭的所有的url
比如

  1. http://www.example.com/photos/detail.html匹配
  2. http://www.example.com/user/user.html不匹配

這時候就需要用到正則表達(dá)式的斷言。 斷言是在遍歷字符串進(jìn)行正則匹配的過程中,會在當(dāng)前字符串先進(jìn)行斷言正則的匹配,然后根據(jù)匹配結(jié)果再決定是否繼續(xù)正則表達(dá)式的匹配

斷言

斷言Assertion分為4種類型

  1. Look Ahead Positive Assertion
  1. Look Ahead Negative Assertion
  2. Look Behind Positive Assertion
  3. Look Behind Negative Assertion

前向斷言Look Ahead指的是斷言正則拿當(dāng)前位置之后的字符串進(jìn)行比較,后向斷言Look Behind拿當(dāng)前位置之前的字符串進(jìn)行比較。Positive指的是如果斷言匹配成功, 則繼續(xù)匹配過程, Negative則相反, 如果斷言匹配成功,則中斷匹配。
這4種斷言,以下面字符串開始為標(biāo)記

  1. Look Ahead Positive Assertion: ?=
  1. Look Ahead Negative Assertion: ?!
  2. Look Behind Positive Assertion: ?<=
  3. Look Behind Negative Assertion:?<!

一般會放在把斷言放在一個括號中, 比如grey(?=hound), 斷言(?=hound), 正則表達(dá)式是grey,但由于斷言的存在只有grey后面跟著hound才會匹配

例子

對上面的需求,我們可以寫成如下簡單的正則進(jìn)行匹配

http://www.example.com/(?!=user/).*

真正的正則表達(dá)式是http://www.example.com/.*, 但當(dāng)遍歷到 http://www.example.com/ 的時候,它會拿下面的字符串先進(jìn)行斷言匹配,如果成功則不繼續(xù)。 http://www.example.com/user/user.html 雖然符合正則表達(dá)式,但在遍歷到 http://www.example.com/ 的時候, 它的斷言正則匹配重構(gòu),則整個匹配中斷,匹配返回false

參考

  1. https://docs.racket-lang.org/guide/Looking_Ahead_and_Behind.html
  2. http://help.qualaroo.com/hc/en-us/articles/201541217-Excluding-URLs-Focusing-on-specific-URLs-Negative-and-Positive-Lookaheads
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容