精通正規表示式之匹配優先與忽略優先

2021-08-14 13:03:49 字數 1058 閱讀 4703

匹配優先:盡可能多的匹配 

忽略優先:盡可能少的匹配 

忽略優先只需要在原本的匹配優先量詞後加乙個問號即可,即在:*、+、?一類字尾元字元後加入?即可

要注意的是,dfa不支援忽略優先。

最近在工作當中在使用乙個正規表示式的時候遇到了乙個問題,用如下正規表示式匹配乙個字串的時候,沒有匹配出我想要的效果。

匹配優先正規表示式:%\

忽略優先正規表示式:%\

字串:%,%

在notepad++裡面匹配出來的效果如下:

只匹配到了乙個,通過查詢發現是把%,%整體當成了乙個匹配成功的結果:

這不是我想要的結果,我希望能把%和%當成兩個結果匹配出來,於是此處改用了忽略優先匹配,忽略優先只需要在原本的匹配優先量詞後加乙個問號即可,然後此處的正規表示式變為了:

然後檢索的結果變成:

成功檢索到了兩個,然後檢查檢索的結果:

成功!之前在看正規表示式的書的時候,對於匹配優先與忽略優先進行過閱讀與理解,但是在工作當中實際上用得不多,這次遇到了這個問題也就想了起來,便再次進行一次記錄,此處也簡單再對造成這種結果的原因進行一次梳理。

匹配優先是在萬用字元匹配的過程中優先當成匹配處理,所以此處的%\在匹配到 %,% 這個字元當中的h},%處的 } 字元時,優先認為了.*是可以匹配該字元的,這也是正確的,因為 . 字元的確可以匹配任意字元,所以此處直到匹配到字串的末尾時才判斷了已匹配的字串可匹配。

忽略優先是在通過符匹配的過程中優先當作不匹配,先匹配萬用字元後的明確的字元,所以此處的%\在匹配到 %,% 這個字元當中的h},%處的 } 字元時,和匹配每乙個字元一樣優先進行了忽略,所以此處就判斷出了是乙個可以匹配的短字串。

總結完畢,go on!

精通正規表示式六 匹配優先與忽略優先

匹配優先 盡可能多的匹配 忽略優先 盡可能少的匹配 我們剛開始接觸的都是匹配優先 忽略優先只需要在原本的匹配優先量詞後加乙個問號即可 要注意的是,dfa不支援忽略優先。來看下面兩個例子 匹配優先 忽略優先 原因是什麼呢?上面說過,匹配優先總是盡可能多的匹配,所以 w 先匹配所有的文字,然後為了匹配 ...

精通正規表示式

我只看了前面兩三章 這書的核心是4 5 6章 精通正規表示式 這本書的第四章和第六章比較值得看 1.多選結構 mm gg 表示匹配 mm 或 gg 2.忽略大小寫 s source dest i 搜尋source,將其替換為dest,此處的i只對source起作用,而不會作用於dest。3.單詞分界...

讀《精通正規表示式》 標準量詞是匹配優先的

正則字元 0 9 這個表示式的本意是捕獲整個數字 2003 但結果並非如此。為了滿足 0 9 的匹配,必須交還一些字元。在這個例子中,釋放的字元是 3.即最後的 3 和點號 之後 3 能夠由 0 9 匹配。0 9 由 量詞修飾,所以現在還只做到了最小的匹配可能,現在它遇到了 找不到其它可以匹配的字元...