正規表示式

2021-07-24 05:37:22 字數 4969 閱讀 2637

字母、數字、漢字、下劃線、以及後邊章節中沒有特殊定義的標點符號,都是」普通字元」。表示式中的普通字元,在匹配乙個字串的時候,匹配與之相同的乙個字元。

舉例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正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...