先從乙個例子開始正規表示式。
書寫乙個匹配手機號的正規表示式,為了方便討論,假定手機號是1開頭,第二位只能是3、5、8中的其中乙個,總共11位的數字,形如13*********。
匹配手機號的正規表示式為:^1[358]\d$
,下面介紹此正規表示式中的各個符號的含義。
^
:表示字串的開頭,後面緊接著1,表示匹配的字串要以"1"開頭。
1
:就是匹配「1」本身,^
不匹配字元,所以1就是匹配字串的第乙個字元。
[358]
:表示可以匹配3、5、8中的任何乙個,當然,也只能匹配乙個字元;[abc]
整個表示式用來匹配乙個字元,這個被匹配字元可以是abc中的任乙個。
\d
:表示乙個數字字元,等同於[0123456789]
,匹配0123456789中的任何乙個數字,[0123456789]
也可以寫作[0-9]
。
:表示前面的
\d
重複9次,即有9個數字。重複次數可以設定範圍值或是最小值,表示前面的元素或是表示式最少重複m次,最多重複n次;
表示前面的元素或是表示式最少重複m次,不設定最大重複次數。
$
:表示字串的結尾,它前面的\d
數字重複9次後,後面就不能再有字元了。
如上圖所示,13666666666符合正規表示式^1[358]\d$
。
"13666666666"的第一位數字1,匹配正規表示式中的^1
,以數字1開頭;第二位數字3匹配表示式中的[358]
,屬於3、5、8中的乙個;第三位至第十一位的9個數字,匹配表示式中的\d
;第十一位數字後不再有字元,匹配表示式$
。
"13"匹配表示式中的^1[358]
,不匹配\d
,後續沒有9個數字;"71366666666"不匹配^1
,沒有以數字1開頭;"136666666666"匹配^1[358]\d
,不匹配$
,9個數字後還有數字;"abf"不匹配^1
,沒有以數字1開頭。
想要匹配字串"abc"中的a,正規表示式a
即可完成任務。在正規表示式中,可以使用字母或是數字,匹配其本身。正規表示式大小寫敏感。
在正則中,.
(英文句點)可以用來匹配任意字元(換行符除外),包括它自己。
正規表示式[an]
表示匹配a或者n,中的字元可以理解為是"或"的關係。
在中可以使用區間表示式,例如[0-9]表示匹配0到9的數字,即所有數字;[a-z]表示匹配所有小寫英文本母,[a-z]表示匹配所有大寫英文本母,[a-f]表示匹配a-f的所有小寫字母。
有時我們希望不要匹配到某些字元,此時也可以用。例如[^abcdef]
表示不匹配abcdef中的任何乙個,其他字元都可以,有些類似於取反。
同樣的,字元區間一樣可以用於取反操作。
需要注意的是,中的^作用範圍是整個。例如[^a-f0-9]
表示不能匹配a-f的小寫字母以及0-9的所有數字。
之前提到過,.
可以匹配所有單個字元(換行符除外),如果只是想匹配".「本身呢?此時只需要在」.「前面加乙個轉義符」\「即可,即正規表示式\.
。
同樣的,之前提到的」["、"]「也可以通過加轉義符來匹配本身,\[
、\]
。」\"同樣可以通過轉義來匹配其本身,\\
。
其他常用元字元如下:
空白元字元
含義\f
換頁符\n
換行符\r
回車符\t
製表符(tab鍵)
\v垂直製表符
元字元含義\d
任何乙個數字字元(等價於[0-9])
\d任何乙個非數字字元(等價於[^0-9])
\w任何乙個單詞字元(數字,大小寫字母,下劃線)(等價於[0-9a-za-z_])
\w任何乙個非單詞字元(即非數字,非大小寫字母,非下劃線)(等價於[^0-9a-za-z_])
\s任何乙個空白字元(等價於[\f\n\r\t\v])
\s任何乙個非空白字元(等價於[^\f\n\r\t\v])
之前說的都是匹配乙個字元,現在說一下如何重複匹配乙個字元。
\d+
表示匹配\d一次或多次
\d*
表示匹配\d零次、一次或多次
\d?
表示匹配\d零次或一次
除了+、*、?可以重複匹配外,還可以使用{}進行更精確的重複匹配次數控制。
\d
表示\d最少匹配三次,最多匹配五次
\d
表示\d最少匹配三次,最大匹配次數不做限制
\d
表示\d匹配三次
\b
表示匹配單詞邊界,也就是乙個位置,此位置一邊是單詞字元(\w代表的內容,即數字,大小寫字母,下劃線_),另一邊不是單詞字元。可以看到,字串"23 word on"共有六個位置屬於單詞邊界。
^
表示匹配字串開頭,字串"23 word on"只有乙個位置匹配成功。"^「用在」"中時表示取反,否則是匹配字串開頭。
$
表示匹配字串結尾,字串"23 word on"只有乙個位置匹配成功。
本文主要介紹了正規表示式中,匹配乙個字元,匹配一組字元中的乙個,什麼是元字元,如何控制重複匹配,最後學習了幾個簡單的位置匹配。
精通正規表示式 1 正規表示式入門
1 能檢查多個檔案,挑出包含重複單詞的行,高亮標記每個重複單詞 使用標準ansi的轉義字元列 同時必須顯示這行文字來自哪個檔案。2 能跨行查詢,即使兩個單詞乙個在某行末尾而另乙個在下一行的開頭,也算重複單詞。3 能進行不區分大小寫的查詢,例如 the the.重複單詞之間可以出現任意數量的空白字元 ...
正規表示式入門
對於文字字元,有11個字元被保留作特殊用途。他們是 這些特殊字元也被稱作元字元 不可顯示字元 可以使用特殊字串行來代表某些不可顯示字元 代表tab 0x09 代表回車符 0x0d 代表換行符 0x0a 字符集 字符集是由一對方括號 括起來的字元集合。使用字符集,你可以告訴正規表示式引擎僅僅匹配多個字...
正規表示式入門
老師說過 正規表示式就是用字串讀取字串!學習正規表示式的最好方法是從例子開始,理解例子之後再自己對例子進行修改,實驗。下面給出了不少簡單的例子,並對它們作了詳細的說明。假設你在一篇英文 裡查詢hi,你可以使用正規表示式hi。這幾乎是最簡單的正規表示式了,它可以精確匹配這樣的字串 由兩個字元組成,前乙...