1. 程式人生 > >正則表示式——非捕獲分組

正則表示式——非捕獲分組

  目前為止,總共介紹了括號的三種用途: 分組,將相關的語速歸攏到一起,構成單個元素;多選結構,規定可能出現的多個子表達示;引用分組,將子表示式匹配的文字儲存起來,供之後引用。

  這三種用途並不是彼此獨立的,而是互相重疊的: 單純的分組可以視為“只包含一個多選分支的多選結構”;整個多選結構也會被視為單個元素,可以由單個量詞限定。最重要的是,無論是否需要引用分組,只要出現了括號,正則表示式在匹配是就會把括號內的子表示式儲存起來,提供引用。如果並不需要引用,儲存這些資訊無疑會影響正則表示式的效能;如果表示式比較複雜,要處理的文字有很多,更可能嚴重影響效能。

  為解決這種問題,正則表示式提供了非捕獲分組

(non-capturing group),非捕獲分組類似普通的捕獲分組,只是在開括號後緊跟一個問號和冒號(?:...),這樣的括號叫做非捕獲分組,它只能限定量詞的作用範圍,不捕獲任何文字。在引用分組時,分組的編號同樣會按開括號出現的順序從左到右遞增,只是必須以捕獲分組為準,非捕獲分組會略過