目前為止,總共介紹了括號的三種用途: 分組,將相關的語速歸攏到一起,構成單個元素;多選結構,規定可能出現的多個子表達示;引用分組,將子表達式匹配的文本存儲起來,供之后引用。
這三種用途並不是彼此獨立的,而是互相重疊的: 單純的分組可以視為“只包含一個多選分支的多選結構”;整個多選結構也會被視為單個元素,可以由單個量詞限定。最重要的是,無論是否需要引用分組,只要出現了括號,正則表達式在匹配是就會把括號內的子表達式存儲起來,提供引用。如果並不需要引用,保存這些信息無疑會影響正則表達式的性能;如果表達式比較復雜,要處理的文本有很多,更可能嚴重影響性能。
為解決這種問題,正則表達式提供了非捕獲分組(non-capturing group),非捕獲分組類似普通的捕獲分組,只是在開括號后緊跟一個問號和冒號(?:...),這樣的括號叫做非捕獲分組,它只能限定量詞的作用范圍,不捕獲任何文本。在引用分組時,分組的編號同樣會按開括號出現的順序從左到右遞增,只是必須以捕獲分組為准,非捕獲分組會略過