一、正規表示式基礎知識
我們先從簡單的開始。假設你要搜尋乙個包含字元「cat」的字串,搜尋用的正規表示式就是「cat」。如果搜尋對大小寫不敏感,單詞「catalog」、「catherine」、「sophisticated」都可以匹配。也就是說:
1.1 句點符號
假設你在玩英文拼字遊戲,想要找出三個字母的單詞,而且這些單詞必須以「t」字母開頭,以「n」字母結束。另外,假設有一本英文本典,你可以用正規表示式搜尋它的全部內容。要構造出這個正規表示式,你可以使用乙個萬用字元——句點符號「.」。這樣,完整的表示式就是「t.n」,它匹配「tan」、「ten」、「tin」和「ton」,還匹配「t#n」、「tpn」甚至「t n」,還有其他許多無意義的組合。這是因為句點符號匹配所有字元,包括空格、tab字元甚至換行符:
1.2 方括號符號
為了解決句點符號匹配範圍過於廣泛這一問題,你可以在方括號(「」)裡面指定看來有意義的字元。此時,只有方括號裡面指定的字元才參與匹配。也就是說,正規表示式「t[aeio]n」只匹配「tan」、「ten」、「tin」和「ton」。但「toon」不匹配,因為在方括號之內你只能匹配單個字元:
1.3 「或」符號
如果除了上面匹配的所有單詞之外,你還想要匹配「toon」,那麼,你可以使用「|」操作符。「|」操作符的基本意義就是「或」運算。要匹配「toon」,使用「t(a|e|i|o|oo)n」正規表示式。這裡不能使用方擴號,因為方括號只允許匹配單個字元;這裡必須使用圓括號「()」。圓括號還可以用來分組,具體請參見後面介紹。
1.4 表示匹配次數的符號
表一顯示了表示匹配次數的符號,這些符號用來確定緊靠該符號左邊的符號出現的次數:
假設我們要在文字檔案中搜尋美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正規表示式如圖一所示。在正規表示式中,連字元(「-」)有著特殊的意義,它表示乙個範圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時,它的前面要加上乙個轉義字元「\」。
圖一:匹配所有123-12-1234形式的社會安全號碼
假設進行搜尋的時候,你希望連字符號可以出現,也可以不出現——即,999-99-9999和999999999都屬於正確的格式。這時,你可以在連字符號後面加上「?」數量限定符號,如圖二所示:
圖二:匹配所有123-12-1234和123121234形式的社會安全號碼
下面我們再來看另外乙個例子。美國汽車牌照的一種格式是四個數字加上二個字母。它的正規表示式前面是數字部分「[0-9]」,再加上字母部分「[a-z]」。圖三顯示了完整的正規表示式。
圖三:匹配典型的美國汽車牌照號碼,如8836kv
1.5 「否」符號
「^」符號稱為「否」符號。如果用在方括號內,「^」表示不想要匹配的字元。例如,圖四的正規表示式匹配所有單詞,但以「x」字母開頭的單詞除外。
圖四:匹配所有單詞,但「x」開頭的除外
1.6 圓括號和空白符號
假設要從格式為「june 26, 1951」的生日日期中提取出月份部分,用來匹配該日期的正規表示式可以如圖五所示:
圖五:匹配所有moth dd,yyyy格式的日期
新出現的「\s」符號是空白符號,匹配所有的空白字元,包括tab字元。如果字串正確匹配,接下來如何提取出月份部分呢?只需在月份周圍加上乙個圓括號建立乙個組,然後用oro api(本文後面詳細討論)提取出它的值。修改後的正規表示式如圖六所示:
圖六:匹配所有month dd,yyyy格式的日期,定義月份值為第乙個組
1.7 其它符號
為簡便起見,你可以使用一些為常見正規表示式建立的快捷符號。如表二所示:
表二:常用符號
例如,在前面社會安全號碼的例子中,所有出現「[0-9]」的地方我們都可以使用「\d」。修改後的正規表示式如圖七所示:
圖七:匹配所有123-12-1234格式的社會安全號碼
正規表示式 正規表示式 總結
非負整數 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正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...