匹配次數中的貪婪與非貪婪
在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同乙個表示式能夠匹配不同的次數,比如:"", "", "?", "*", "+",具體匹配的次數隨被匹配的字串而定。這種重複匹配不定次數的表示式在匹配過程中,總是盡可能多的匹配。比如,針對文字 "d***d***d",舉例如下:
表示式匹配結果
+)"\w+" 將匹配第乙個 "d" 之後的所有字元 "***d***d"
+)(d)"\w+" 將匹配第乙個 "d" 和最後乙個 "d" 之間的所有字元 "***d***"。雖然 "\w+" 也能夠匹配上最後乙個 "d",但是為了使整個表示式匹配成功,"\w+" 可以 "讓出" 它本來能夠匹配的最後乙個 "d"
由此可見,"\w+" 在匹配的時候,總是盡可能多的匹配符合它規則的字元。雖然第二個舉例中,它沒有匹配最後乙個 "d",但那也是為了讓整個表示式能夠匹配成功。同理,帶 "*" 和 "" 的表示式都是盡可能地多匹配,帶 "?" 的表示式在可匹配可不匹配的時候,也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 。
非貪婪模式:
在修飾匹配次數的特殊符號後再加上乙個 "?" 號,則可以使匹配次數不定的表示式盡可能少的匹配,使可匹配可不匹配的表示式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導致整個表示式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表示式匹配成功。舉例如下,針對文字 "d***d***d" 舉例:
表示式匹配結果
+?)"\w+?" 將盡可能少的匹配第乙個 "d" 之後的字元,結果是:"\w+?" 只匹配了乙個 "x"
+?)(d)
為了讓整個表示式匹配成功,"\w+?" 不得不匹配 "***" 才可以讓後邊的 "d" 匹配,從而使整個表示式匹配成功。因此,結果是:"\w+?" 匹配 "***"
更多的情況,舉例如下:
)" 與字串 "aa
bb" 匹配時,匹配的結果是:成功;匹配到的內容是 "aa
bb" 整個字串, 表示式中的 "" 將與字串中最後乙個 "" 匹配。
?)" 匹配舉例1中同樣的字串時,將只得到 "aa
", 再次匹配下乙個時,可以得到第二個 "bb
"。
正規表示式 規則表示式
今天學習了正規表示式的一些基礎知識,1.概念 首先了解了一下正規表示式的含義 一些便於計算機識別的規則,能夠快速方便地對字元進行操作。而對於計算機而言,也有一寫規則表示式,它是能令計算機讀懂的 所以對我們來說看起來比較費勁 也相當於計算機的常識,一遇到就知道你要幹什麼。2.建立正則物件 var re...
正規表示式 規則
system.out.printf example 2f n 19.234 example 19.23 system.out.printf example 6.2f n 19.234 example 19.23 l xn匹配 ascii 碼值等於 n的字元 此處的 n 必須是兩位的十六進製制數。例如...
正規表示式規則
正規表示式是用乙個字串表示乙個特徵,來驗證另乙個字串是否滿足這一特徵的方法。正規表示式主要用於檢驗規則匹配,查詢特定規則字串的位置,進行特定規則替換。1.匹配普通字元 匹配乙個特定的字元,如a,那麼正規表示式就寫為a。2.匹配轉義字元 一般轉義字元 r 回車,n 換行,t 製表符,f 換頁符,v 垂...