以 (? 開頭,) 結尾的都稱為非捕獲組,在比對完成後在記憶體中不保留比對到的字元。
非捕獲組的應用比較複雜,這裡隻能簡單地說一下它們的意思。
(?: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