字母、數字、漢字、下劃線、以及後邊章節中沒有特殊定義的標點符號,都是」普通字元」。表示式中的普通字元,在匹配乙個字串的時候,匹配與之相同的乙個字元。舉例1:表示式 「c」,在匹配字串 「abcde」 時,匹配結果是:成功;匹配到的內容是:」c」;匹配到的位置是:開始於2,結束於3。(注:下標從0開始還是從1開始,因當前程式語言的不同而可能不同)
舉例2:表示式 「bcd」,在匹配字串 「abcde」 時,匹配結果是:成功;匹配到的內容是:」bcd」;匹配到的位置是:開始於1,結束於4。
一些不便書寫的字元,採用在前面加 「/」 的方法。這些字元其實我們都已經熟知了。表示式
可匹配\r,\n
代表回車和換行符
\t製表符
\\代表」\」本身
還有其他一些在後邊章節中有特殊用處的標點符號,在前面加 「\」 後,就代表該符號本身。比如:^, $ 都有特殊意義,如果要想匹配字串中 「^」 和 「$」 字元,則表示式就需要寫成 「\^」 和 「\$」。表示式
可匹配\^
匹配^符號本身
\$匹配$符號本身
\.匹配小數點(.)本身
這些轉義字元的匹配方法與 「普通字元」 是類似的。也是匹配與之相同的乙個字元。舉例1:表示式 「\$d」,在匹配字串 「abc\de
」時,匹
配結果是
:成功;
匹配到的
內容是:
」 d」;匹配到的位置是:開始於3,結束於5。
正規表示式中的一些表示方法,可以匹配 『多種字元』 其中的任意乙個字元。比如,表示式 「\d」 可以匹配任意乙個數字。雖然可以匹配其中任意字元,但是只能是乙個,不是多個。這就好比玩撲克牌時候,大小王可以代替任意一張牌,但是只能代替一張牌。表示式
可匹配\d
任意乙個數字,0-9中的任意乙個
\w任意乙個字母或數字或下劃線,也就是 a~z,a~z,0~9,_ 中任意乙個
\s包括空格、製表符、換頁符等空白字元的其中任意乙個
.小數點可以匹配除了換行符(/n)以外的任意乙個字元
舉例1:表示式 「/d/d」,在匹配 「abc123」 時,匹配的結果是:成功;匹配到的內容是:」12」;匹配到的位置是:開始於3,結束於5。舉例2:表示式 「a./d」,在匹配 「aaa100」 時,匹配的結果是:成功;匹配到的內容是:」aa1」;匹配到的位置是:開始於1,結束於4。
使用方括號 [ ] 包含一系列字元,能夠匹配其中任意乙個字元。用 [^ ] 包含一系列字元,則能夠匹配其中字元之外的任意乙個字元。同樣的道理,雖然可以匹配其中任意乙個,但是只能是乙個,不是多個。表示式
可匹配}
[ab5@]
匹配 「a」 或 「b」 或 「5」 或 「@」
[^abc]
匹配 「a」,」b」,」c」 之外的任意乙個字元
[f-k]
匹配 「f」~」k」 之間的任意乙個字母
[^a-f0-3]
匹配 「a」~」f」,」0」~」3」 之外的任意乙個字元
舉例1:表示式 「[bcd][bcd]」 匹配 「abc123」 時,匹配的結果是:成功;匹配到的內容是:」bc」;匹配到的位置是:開始於1,結束於3。舉例2:表示式 「[^abc]」 匹配 「abc123」 時,匹配的結果是:成功;匹配到的內容是:」1」;匹配到的位置是:開始於3,結束於4。
前面章節中講到的表示式,無論是只能匹配一種字元的表示式,還是可以匹配多種字元其中任意乙個的表示式,都只能匹配一次。如果使用表示式再加上修飾匹配次數的特殊符號,那麼不用重複書寫表示式就可以重複匹配。表示式使用方法是:」次數修飾」放在」被修飾的表示式」後邊。比如:」[bcd][bcd]」 可以寫成 「[bcd]」。
作用表示式重複n次,比如:」\w」 相當於 「\w\w」;」a」 相當於 「aaaaa」
表示式至少重複m次,最多重複n次,比如:」ba」可以匹配 「ba」或」baa」或」baaa」
表示式至少重複m次,比如:」\w\d」可以匹配 「a12」,」_456」,」m12344」…
?匹配表示式0次或者1次,相當於 ,比如:」a[cd]?」可以匹配 「a」,」ac」,」ad」
+表示式至少出現1次,相當於 ,比如:」a+b」可以匹配 「ab」,」aab」,」aaab」…
*表示式不出現或出現任意次,相當於 ,比如:」\^*b」可以匹配 「b」,」^^^b」..
舉例1:表示式 「\d+.?\d*」 在匹配 「it costs $12.5」 時,匹配的結果是:成功;匹配到的內容是:」12.5」;匹配到的位置是:開始於10,結束於14。舉例2:表示式 「gogle」 在匹配 「ads by goooooogle」 時,匹配的結果是:成功;匹配到的內容是:」goooooogle」;匹配到的位置是:開始於7,結束於17。
一些邊界符號在表示式中代表抽象的特殊意義:表示式作用^
與字串開始的地方匹配,不匹配任何字元
$與字串結束的地方匹配,不匹配任何字元
\b匹配乙個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字元
舉例1:表示式 「^aaa」 在匹配 「*** aaa ***」 時,匹配結果是:失敗。因為 「^」 要求與字串開始的地方匹配,因此,只有當 「aaa」 位於字串的開頭的時候,」^aaa」 才能匹配,比如:」aaa *** ***」。舉例2:表示式 「aaa$」 在匹配 「*** aaa ***」 時,匹配結果是:失敗。因為 「$」 要求與字串結束的地方匹配,因此,只有當 「aaa」 位於字串的結尾的時候,」aaa$」 才能匹配,比如:」*** *** aaa」。
舉例3:表示式 「.\b.」 在匹配 「@@@abc」 時,匹配結果是:成功;匹配到的內容是:」@a」;匹配到的位置是:開始於2,結束於4。
進一步說明:」\b」 與 「^」 和 「$」 類似,本身不匹配任何字元,但是它要求它在匹配結果中所處位置的左右兩邊,其中一邊是 「\w」 範圍,另一邊是 非」\w」 的範圍。
舉例4:表示式 「\bend\b」 在匹配 「weekend,endfor,end」 時,匹配結果是:成功;匹配到的內容是:」end」;匹配到的位置是:開始於15,結束於18。
一些符號可以影響表示式內部的子表示式之間的關係:表示式作用|
左右兩邊表示式之間 「或」 關係,匹配左邊或者右邊
()(1). 在被修飾匹配次數的時候,括號中的表示式可以作為整體被修飾 (2). 取匹配結果的時候,括號中的表示式匹配到的內容可以被單獨得到
舉例1:表示式 「tom|jack」 在匹配字串 「i』m tom, he is jack」 時,匹配結果是:成功;匹配到的內容是:」tom」;匹配到的位置是:開始於4,結束於7。匹配下乙個時,匹配結果是:成功;匹配到的內容是:」jack」;匹配到的位置時:開始於15,結束於19。舉例2:表示式 「(go\s*)+」 在匹配 「let』s go go go!」 時,匹配結果是:成功;匹配到內容是:」go go go」;匹配到的位置是:開始於6,結束於14。
舉例3:表示式 「¥(\d+.?\d*)」 在匹配 「$10.9,¥20.5」 時,匹配的結果是:成功;匹配到的內容是:」¥20.5」;匹配到的位置是:開始於6,結束於11。單獨獲取括號範圍匹配到的內容是:」20.5」。
在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同乙個表示式能夠匹配不同的次數,比如:」」, 「」, 「?」, 「*」, 「+」,具體匹配的次數隨被匹配的字串而定。這種重複匹配不定次數的表示式在匹配過程中,總是盡可能多的匹配。比如,針對文字 「d***d***d」,舉例如下:表示式
匹配結果
(d)(\w+)
「\w+」 將匹配第乙個 「d」 之後的所有字元 「***d***d」
(d)(\w+)(d)
「\w+」 將匹配第乙個 「d」 和最後乙個 「d」 之間的所有字元 「***d***」。雖然 「\w+」 也能夠匹配上最後乙個 「d」,但是為了使整個表示式匹配成功,」\w+」 可以 「讓出」 它本來能夠匹配的最後乙個 「d」
由此可見,」\w+」 在匹配的時候,總是盡可能多的匹配符合它規則的字元。雖然第二個舉例中,它沒有匹配最後乙個 「d」,但那也是為了讓整個表示式能夠匹配成功。同理,帶 「*」 和 「」 的表示式都是盡可能地多匹配,帶 「?」 的表示式在可匹配可不匹配的時候,也是盡可能的 「要匹配」。這 種匹配原則就叫作 「貪婪」 模式 。非貪婪模式:
在修飾匹配次數的特殊符號後再加上乙個 「?」 號,則可以使匹配次數不定的表示式盡可能少的匹配,使可匹配可不匹配的表示式,盡可能的 「不匹配」。這種匹配原則叫作 「非貪婪」 模式,也叫作 「勉強」 模式。如果少匹配就會導致整個表示式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表示式匹配成功。舉例如下,針對文字 「d***d***d」 舉例:表示式
匹配結果
(d)(\w+?)
「\w+?」 將盡可能少的匹配第乙個 「d」 之後的字元,結果是:」\w+?」 只匹配了乙個 「x」
(d)(\w+?)(d)
為了讓整個表示式匹配成功,」\w+?」 不得不匹配 「***」 才可以讓後邊的 「d」 匹配,從而使整個表示式匹配成功。因此,結果是:」\w+?」 匹配 「***」
參考**:揭開正規表示式的神秘面紗
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...