一,字元匹配
1。 \b 代表著單詞的開頭或結尾,也就是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b並不匹配這些單詞分隔字元中的任何一個,它只匹配一個位置。
2。 . 是另一個元字元,匹配除了分行符號以外的任一字元。
3。 \n 分行符號
4。 \d 匹配一個數字 【0,1,2,3.....】
5。 \w 匹配字母或數字或底線或漢字等
6。 \s 匹配任意的空白符,包括空格,定位字元(Tab),分行符號,中文全形空格等
7。 ^ 匹配字串的開始
8。 $ 匹配字串的結束
9。 \ 取消字元的特殊意義,當然如何尋找\ 也要用\,那麼就是\\
10。 [] 匹配其中的任何一個字元,可以是範圍,也可以是指定的特定的字元
如果是範圍使用“-”符號,否則直接指定即可
11。 | 相當於編碼中的or 前後只要有一個滿足條件,即可匹配成功。
12。 () 將括弧中的所有Regex作為一個整體
二,重複匹配數量
1。 * 同樣是元字元,不過它代表的不是字元,也不是位置,而是數量——它指定*前邊的內容可以連續重複使用任意次。
2。 {一個整數} 表示大括弧前面的重複出現的次數
{一個小整數,一個大整數} 重複匹配的次數,最少不能少於,最大不能大於
例子:0\d{2}-\d{8} 以0開頭,後面跟兩位元字,以"-"符號串連,後面跟8個數字
3。 + 這裡的+是和*類似的元字元,不同的是*匹配重複匹配任意次(可能是0次),而+則重複匹配1次或更多次
4。 ? 重複零次或一次,也就是可有可無
三反義,及其他
. 常用的反義
表3.常用的反義代碼 代碼/文法 說明
\W 匹配任意不是字母,數字,底線,漢字的字元
\S 匹配任意不是空白符的字元
\D 匹配任意非數位字元
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任一字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任一字元
18 (?=exp) 也叫零寬度正預測先行斷言
(?<=exp) 也叫零寬度正回顧後發斷言
貪婪與懶惰
當Regex中包含能接受重複的限定符時,通常的行為是(在使整個運算式能得到匹配的前提下)匹配儘可能多的字元。以這個運算式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。
有時,我們更需要懶惰匹配,也就是匹配儘可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:
a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。
為什麼第一個匹配是aab(第一到第三個字元)而不是ab(第二到第三個字元)?簡單地說,因為Regex有另一條規則,比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權——The match that begins earliest wins。
表5.懶惰限定符
| 代碼/文法 |
說明 |
| *? |
重複任意次,但儘可能少重複 |
| +? |
重複1次或更多次,但儘可能少重複 |
| ?? |
重複0次或1次,但儘可能少重複 |
| {n,m}? |
重複n到m次,但儘可能少重複 |
| {n,}? |
重複n次以上,但儘可能少重複 |