1.正則表達式中的圓括號的作用是對字符進行分組,並保存匹配的文本。
2.圓括號用法I:對字符或元字符進行分組,這樣在圓括號內就可以對字符組合使用限定符。
eg. 匹配A+一個數字+A+一個數字:(A\d){2}
3.圓括號用法II:表示可選擇性。
3.1 從兩個直接量中選擇一個
eg. gr(a|e)y匹配gray和grey,該例子還可以使用gr[ae]y,字符類效率更高。
3.2 從多個直接量中選擇
eg. (Doctor|Dr\.?)匹配Doctor,Dr,Dr.三種情況
3.3 錯誤匹配的交替行為,
使用交替行為時,有時會出現意想不到的錯誤。
eg. 用(a|ab)匹配ab時,只能匹配a,但是如果用(ab|a),則可以匹配ab
4.捕獲圓括號:正則表達式中,與位於圓括號之間的模式匹配的內容都會被捕獲。
4.1 當模式中有嵌套的圓括號時,變量的編號會按照圓開括號出現的位置一次進行。
eg. ([A-Za-z](\d{2}))((-)\d{2})匹配”A22-33”時,匹配情況如下:
Group 1: A22
Group 2: 22
Group 3: -33
Group 4: -
4.2 .NET中,可以創建命名的組,語法為:
(?<組名>模式)或(?’組名’模式)
eg. (?<FirstLetter>\w(?'Num'\d{2}))((-)\d{2})匹配” A22-33”情況為:
Group "FirstLetter": A22
Group "Num": 22
Group 1: -33
Group 2: -
4.3 非捕獲的圓括號:.NET和JavaScript都提供了非捕獲圓括號的功能,即圓括號的內容不作為捕獲對象,當圓括號中的內容不是想捕獲的對象時,采用非捕獲圓括號可以提高匹配效率。語法為:
(?:the-non-captured-content)
eg. (\w(?:\d{2}))((?:-)\d{2})匹配” A22-33”情況如下:
Group 1: A22
Group 2: -33
注:\d{2}匹配的”22”沒有被捕獲
5.反向引用(backreferences)
語法:.NET和javascript中,表示匹配第一組的變量被指定為”\1”
能夠體現反向引用的便利性的一種情況是找到句子中重復的單詞。
eg. 查找下列句子中重復的單詞:
I think that that is often overdone.
This sentence contains contains a doubled word or two two.
我們用([A-Za-z]+) +\1\b來匹配,紅色部分為匹配的結果
在這個匹配模式中([A-Za-z]+)為匹配的第一組變量,后面加一個或多個空格( +)表示單詞間隔,
然后用”\1”來表示第一組匹配的變量(即[A-Za-z]+匹配的內容),最后一個表示單詞的結束(\b)