正則表達式 - 字符匹配不以某字段開頭或者結尾

個人博文地址: https://www.luoyangfu.com/art...

最近有一個需求,要求是判斷某個字符串不以什麼開頭。而後就開始探索這個不以什麼開頭和不易什麼結尾的正則怎麼寫,why?正則表達式

不以某字符串開頭

這裏須要提一個概念叫 否認式前項匹配 這個東東。spa

向前匹配

根據匹配的字符序列後面存在一個特定的字符序列或者不存在一個特定的序列來決定是否匹配。對於向前匹配,出如今指定項後面的字符序列不會被正則表達式返回。.net

這裏說後面存在一個特定字符序列, 也稱之爲確定式向前查找
不存在一個特定的序列,也稱之爲否認式向前查找
這兩個概念後續再深刻

開始解決這個問題不以某字符串開頭:code

^(?!str)

這裏使用了下面幾個元符號:blog

  1. ^ 判斷是不是開頭
  2. ?! 這裏是否認向前查詢

示例:rem

  1. 不以test 開頭字符串
/^(?!test).*/

-w294

不以某字符串結尾

這裏要說一個概念叫 否認式向後匹配,前面說了向前匹配,想後匹配呢?字符串

向後匹配

一個要匹配的字符串序列前面有或者沒有指定的字符串序列get

這裏有指定字符串序列也叫 確定式向後匹配
這裏沒有指定字符串序列也叫 否認式向後匹配
這兩個概念後續深刻

解決不以某字符串結尾:it

(?<!str)$

這裏用了以下幾個符號:class

  1. ?<! 否認式向後查詢
  2. $ 是否結尾

示例:

不以 end 結尾

/.*(?<!end)$/

-w299

收集幾個 ? 元字符用法

(?:str)   非捕獲組

(?=str) 確定式向前查找

(?!str) 否認式向前查找

(?<=str) 確定式向後查找

(?<!str) 否認式向後查找

參考地址:

https://blog.csdn.net/LinBili...
https://blog.csdn.net/libingx...
相關文章
相關標籤/搜索