正則表達式學習筆記(二)

  • 字符轉義

如何在目標字符串裏面查找元字符呢?比如”.””*”,如果直接在正則表達式裏面直接使用肯定是不行的。

正則表達式這裏處理的辦法和 一般編程語言處理方式相類似,直接使用\來取消它的元字符地位,於是,可以在元字符裏面可以這樣使用:”\.”或者”\*”

  • 查找未被預定義的字符

標題的意思是說,如果想要查找的字符沒有相對應的元字符來處理怎麼辦?在正則表達式裏面我們使用中括號[]來處理,你只要在中括號裏面列舉你想要查找的字符就可以了。例如查找0~9的數字和w字符:

wKiom1V1OL7zfWVLAABO4jc-IqU880.jpg

  • 分支條件

首先來看一個例子:

         \(?0\d{2}[) -]?\d{8}

上面的()也是元字符,這裏使用了\轉義符,後面跟了?符號,所以表示的查找的就是有括號或者沒有括號開頭的字符串。分解如下:

         \(? 0\d{2}[) -]? \d{8}

可以匹配類似於(010)88886666022-22334455 02912345678等多種字符串。如果你想要查找電話號碼的話,那就問題大了,因上面這個表達式還有可能匹配類似於010)12345678(022-87654321這種字符串。

         怎麼解決上面的問題呢?

         答案當然是給上述的正則表達式使用更加精準的限制條件。這裏我們使用分支條件。

         所謂分支條件是指:多種規則並列共同構成一個正則表達式,只要字符串匹配符合其中一個規則,就算找到一個字符串,多個規則之間使用|符號來分開。

以上面的例子來說明:\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}

wKiom1V1ONXibbh3AADP_p5VlNY805.jpg

在使用分支條件的時候,要注意各個條件之間的順序,因爲正則表達式工作的時候是從左到右來匹配的,如果某個字符串符合第一條規則,就直接跳出了,不會再去管。例如可以比較試下\d{5}-\d{4}|\d{5}\d{5}|\d{5}-\d{4}的區別。

  • 分組

先來看兩個例子:

         \d{3}表示數字重複三次。

         \w{4}表示匹配4位字符的單詞(\w的意義表示0~9A~Za~z等請看前章節)。

現在,提問:要是想指定HG這兩個字符重複多次怎麼辦?或者其他任意指定的字符重複多次怎麼辦?

正則表達式裏面使用 分組 來解決這個問題。

分組,或者叫做子表達式,在正則表達式裏面使用小括號來指定,包含在小括號裏面的字符就是一個分組,你可以對它們的重複次數做處理。小括號前面說過,也是元字符。

例如,匹配IP地址:

         (\d{1,3}\.){3}\d{1,3}

可以這樣分解:

         (\d{1,3}\.){3} \d{1,3}

小括號裏面的意思是1~3位數字外加一個點;小括號後面跟了個{3}表示子表達式必須重複3次。橙色的表示1~3位數字。

wKioL1V1OougRIvvAABcJAJHAHs802.jpg

  • 反義

前面已經提到了分組這個好東西,用着也還順手,現在又有新的問題了,萬一我想查找a~z,A~Z52個字符怎麼辦?難道要將他們全部都寫進子表達式麼?有沒有好的辦法呢?這裏使用到了反義。

         聯繫前面學過的元字符,反義其實就是把他們的元字符大寫。具體如下:

代碼

詳解

\W

匹配任意不是字母,數字,下劃線,漢字等等的字符

\S

匹配任意不是空白符的字符

\D

匹配任意不是數字的字符

\B

匹配任意不是單詞開頭或者結尾的位置

[^X]

匹配除了X以外的任意字符

[^aieou]

匹配除了aieou幾個字母以外的任意字符

例如:\S+表示不包含空白符的字符串(至少有一個字符)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章