非捕獲組的詳解!

以 (? 開頭,) 結尾的都稱爲非捕獲組,在匹配完成後在內存中不保留匹配到的字符。

非捕獲組的應用比較複雜,這裏只能簡單地說一下它們的意思。

(?:X) X,作爲非捕獲組
與捕獲組 ( ) 的意思一樣也是將其作爲一組進行處理,與捕獲組的區別在於不捕獲匹配的文本,
僅僅作爲分組。
比如:要匹配 123123 這個,就可以寫爲 (123)/1 使用反向引用,這時只能用捕獲組,在匹配
123 後會保留在內存中,便於反向引用,而 (?:123) 在匹配完後則不會保留,區別僅在於此。

(?idmsux-idmsux)  Nothing,但是將匹配標誌i d m s u x on - off
用於標誌匹配,比如:表達式 (?i)abc(?-i)def 這時,(?i) 打開不區分大小寫開關,abc 匹配
不區分大小地進行匹配,(?-i) 關閉標誌,恢復不區分大小寫,這時的 def 只能匹配 def

(?idmsux-idmsux:X)   X,作爲帶有給定標誌 i d m s u x on - off 
與上面的類似,上面的表達式,可以改寫成爲:(?i:abc)def,或者 (?i)abc(?-i:def)

(?=X) X,通過零寬度的正 lookahead 
(?!X) X,通過零寬度的負 lookahead

(?=X) 表示當前位置(即字符的縫隙)後面允許出現的字符,比如:表示式 a(?=b),在字符串爲
ab 時,可能匹配 a,後面的 (?=b) 表示,a 後面的縫隙,可以看作是零寬度。
(?!X) 表示當前位置後面不允許出現的字符

(? <=X) X,通過零寬度的正 lookbehind 
(? <!X) X,通過零寬度的負 lookbehind

這兩個與上面兩個類似,上面兩個是向後看,這個是向前看

(?>X) X,作爲獨立的非捕獲組
匹配成功不進行回溯,這個比較複雜,也侵佔量詞“+”可以通用,比如:/d++ 可以寫爲 (?>/d+)。

來自,

http://topic.csdn.net/u/20080503/01/3c82b040-43b9-4b44-847d-07b366285957.html?seed=1400661853

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章