\b | 代表着單詞的開頭或結尾,也就是單詞的分界處。(只匹配一個位置) |
---|---|
. | 匹配除了換行符以外的任意字元 |
* | 匹配重複任意次(可能是0次)。它指定*前邊的內容可以連續重複使用任意次以使整個表達式得到匹配。 |
+ | 匹配重複1次或更多次。 |
.* | 任意數量的不包含換行的字元 |
\d | 匹配一位數位(0,或1,或2,或……) |
\s | 匹配任意的空白符,包括空格,製表符(Tab),換行符,中文全形空格等。 |
\w | 匹配字母或數位或下劃線或漢字等。 |
^ | 匹配字串的開始 |
$ | 匹配字串的結束 |
例子:
查詢元字元本身**(. ,* ,+ ,/)**,得使用「\」來取消這些字元的特殊意義。
* | 重複零次或更多次 |
---|---|
+ | 重複一次或更多次 |
? | 重複零次或一次 |
{n} | 重複n次 |
{n,} | 重複n次或更多次 |
{n,m} | 重複n到m次 |
例子:
(?0\d{2}[) -]?\d{8}:首先是一個跳脫字元(,它能出現0次或1次(?),然後是一個0,後面跟着2個數字(\d{2}),然後是)或-或空格中的一個,它出現1次或不出現(?),最後是8個數字(\d{8})。
匹配分枝條件時,將會從左到右地測試每個條件,如果滿足了某個分枝的話,就不會去再管其它的條件了。
例子:
\d{5}-\d{4}|\d{5}:用於匹配美國的郵政編碼。美國郵編的規則是5位數位,或者用連字號間隔的9位數位。(使用分枝條件時,要注意各個條件的順序)
如果想要重複多個字元,用小括號來指定子表達式(也叫做分組),然後你就可以指定這個子表達式的重複次數了。
例子:
(\d{1,3}.){3}\d{1,3}:\d{1,3}匹配1到3位的數位,(\d{1,3}.){3}匹配三位數位加上一個英文句號(這個整體也就是這個分組)重複3次,最後再加上一個一到三位的數位(\d{1,3})
加粗樣式
有時需要查詢不屬於某個能簡單定義的字元類的字元。比如想查詢除了數位以外,其它任意字元都行的情況,這時需要用到反義。
\W | 匹配任意不是字母,數位,下劃線,漢字的字元 |
---|---|
\S | 匹配任意不是空白符的字元 |
\D | 匹配任意非數位的字元 |
\B | 匹配不是單詞開頭或結束的位置 |
[^x] | 匹配除了x以外的任意字元 |
[^aeiou] | 匹配除了aeiou這幾個字母以外的任意字元 |
例子:
使用小括號指定一個子表達式後,匹配這個子表達式的文字(也就是此分組捕獲的內容)可以在表達式或其它程式中作進一步的處理。
1、後向參照用於重複搜尋前面某個分組匹配的文字。 例如,\1代表分組1匹配的文字。
例子:
1、\b(\w+)\b\s+\1\b : 可以用來匹配重複的單詞,像go go, 或者kitty kitty。
這個表達式首先是一個單詞,也就是單詞開始處和結束處之間的多於一個的字母或數位(\b(\w+)\b),這個單詞會被捕獲到編號爲1的分組中,然後是1個或幾個空白符(\s+),最後是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。
2、也可以自己指定子表達式的組名。
要指定語法:(?<Word>\w+)(或者把尖括號換成’也行:(?‘Word’\w+))
這樣就把\w+的組名指定爲Word了。
要反向參照這個分組捕獲的內容,你可以使用\k<Word>.
用於查詢在某些內容(但並不包括這些內容)之前或之後的東西,用於指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱爲零寬斷言。
1. 零寬度正預測先行斷言-------(?=exp) : 斷言自身出現的位置的後面能匹配表達式exp
例子:
2. 零寬度正回顧後發斷言---------(?<=exp) : 斷言自身出現的位置的前面能匹配表達式exp
例子:
小括號的另一種用途是通過語法(?#comment)來包含註釋。
例子:
2[0-4]\d(?#200-249)|250-5|[01]?\d\d?(?#0-199)
1. 貪婪匹配:匹配儘可能多的字元。
例子:
a.*b:匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。
2. 懶惰匹配,也就是匹配儘可能少的字元。只要在限定符後面加上「?」
例子:
.*? : 匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。
a.*?b : 匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。