\b
\b是正則表達式規定的一個特殊代碼,也叫元字符(metacharacter),代表著單詞的開頭或結尾,也就 是單詞的分界處。雖然通常英文的單詞是由空格,標點符號或者換行來分隔的,但是\b并 不匹配這些單詞分隔字符中的任何一個,它只匹配一個位置。
如果需要更精確的說法,\b匹配這樣的位置:它的前一個字符 和后一個字符不全是(一個是,一個不是或不存在)\w。
. 和 *
.是另一個元字符,匹配除了換行符以 外的任意字符。同樣是元字符,不過它代表的不是字符,也不是位置,而是數量——它 指定前邊的內容可以連續重復使用任意次以使整個表達式得到匹配。因此,.連在一起就意味著任意數量的不包含換行的字符?,F在 \bhi\b.\bLucy\b 的意思就很明顯了:先是一個單詞 hi,然后是任意個任意字符(但不能是換行),最后是Lucy這個單詞。
換行符就是'\n',ASCII編碼為10(十六進制0x0A)的字符。
\d
\d是個元字符,匹配一位數字。
0\d\d-\d\d\d\d\d\d\d\d
匹配這樣的字符串:以0開頭,然后是兩個數字,然后是一個連字號“-”,最后是8個數字(也就是中國的電話號碼。當然,這個例子只 能匹配區號為3位的情形)。
為了避免重復,我們也可以這樣寫這個表達式:0\d{2}-\d{8}
。 這里\d后面的{2}、{8}的意思是前面\d必須連續重復匹配2次、8次。
+
\d+匹配1個或更多連續的數字。 這里的+是和類似的元字符,不同的是匹配重復任意次(可能是0次),而+則匹配重復1次或更多次。
\s
\s匹配任意的空白 符,包括空格,制表符(Tab),換行符,中文全角空格等。
\w
\w匹配字母或數字或下劃線或漢字等。
[]
[aeiou]就匹配任何一個英文元音字母,[.?!]匹配標點符號(.或?或!)。
我們也可以輕松地指定一個字符范圍,像[0-9]代 表的含意與\d就是完全一致的:一位數字; 同理[a-z0-9A-Z_]也完全等同于\w(如 果只考慮英文的話)。
代碼 | 說明 |
---|---|
. | 匹配除換行符以外的任意字符 |
\w | 匹配字母或數字或下劃線或漢字 |
\s | 匹配任意的空白符 |
\d | 匹配數字 |
\b | 匹配單詞的開始或結束 |
^ | 匹配字符串的開始 |
$ | 匹配字符串的結束 |
代碼 | 說明 |
---|---|
* | 重復零次或更多次 |
+ | 重復一次或更多次 |
? | 重復零次或一次 |
{n} | 重復n次 |
{n,} | 重復n次或更多次 |
{n,m} | 重復n到m次 |
練習:
正則:\(?0\d{2}[) -]?\d{8}
釋義:這個表達式可以匹配幾種格式的電話號碼,像(010)88886666,或022-22334455, 或02912345678等。我們對它進行一些分析吧:首先是一個轉義字符(,它能出現0次或1次(?),然后是一個0,后面跟著2個數字(\d{2}),然后是)或-或空格中 的一個,它出現1次或不出現(?),最后是8個數字(\d{8})。
分枝條件
|
正則表達式里的分枝條件指的是有幾種規則,如 果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。
0\d{2}-\d{8}|0\d{3}-\d{7}
這個表達式能匹配兩種以連字號分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號 (0376-2233445)。
分組
()
用小括號來指定子表達式(也叫做分組),然后你就可以指定這個子表達式的重復次數。
(\d{1,3}\.){3}\d{1,3}
是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹 配1到3位的數字,(\d{1,3}.){3}匹 配三位數字加上一個英文句號(這個整體也就是這個分組)重 復3次,最后再加上一個一到三位的數字(\d{1,3})。
反義
有時需要查找不屬于某個能簡單定義的字符類的字符。比如想查找除了數字以外,其它任意字符都行的情況,這時需要用到反義:
代碼 | 說明 |
---|---|
\W | 匹配任意不是字母,數字,下劃線,漢字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非數字的字符 |
\B | 匹配不是單詞開頭或結束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou這幾個字母以外的任意字符 |
例子:
\S+
匹配不包含空白符的字符串。
<a[^>]+>
匹配用 尖括號括起來的以a開頭的字符串。
后向引用
零寬斷言
負向零寬斷言
注釋
貪婪與懶惰
處理選項
平衡組/遞歸匹配
未完待續......
From http://www.oschina.net/question/12_9507?fromerr=GPofWDZj