註釋
字符序列(?#標記開始一個註釋直到遇到一個右括號。不允許嵌套括號。註釋中的字符不會作為模式的一部分參與匹配。
如果設定了 PCRE_EXTENDED 選項,一個字符類別外部的未轉義的# 字元就代表本行剩餘部分為註解。使用一個模式來匹配固定深度的嵌套。 PCRE模式解決了圓括號問題(假設 PCRE_EXTENDED 選項被設定了, 因此空白字元被忽略): ( ( (?>[^()]+) | (?R) )* )。左括號。 然後它匹配任意數量的非括號字元序列或一個模式自身的遞歸匹配(例如, 一個正確的括號子字串),最終,匹配一個右括號。因此使用了一次性子組來匹配非括號字符, 這在模式應用到模式不匹配的字符串時非常重要。 ,如果不使用一次性子組,這個匹配將會運行很長時間, 因為有很多途徑讓+ 和* 重複限定分隔目標字串, 並且在報告失敗之前需要測試所有路徑。設定的捕獲值都是從遞歸最外層子模式捕獲的值。 。如果在模式中有超過15 個捕獲括號, PCRE 在遞歸期間就會使用pcre_malloc 分配額外的內存來存儲數據, 隨後通過pcre_free 釋放他們。在遞歸內部無法給出記憶體不夠用的錯誤。 >name) 或 (?P&name)。程式. 前面一些有一個例子指出模式 (sens|respons)e and 1ibility 匹配 ”sense and responsibility” 和 ”response and responsibility”,但是不匹配 ”sense and responsibility”。如果用模式(sens|respons)e and (?1)ibility 替代, 它會像匹配那兩個字串一樣匹配 ”sense and responsibility」。 這種引用方式意義是緊接著匹配引用的子模式。 (譯註: 後向引用只匹配引用的子組之前匹配的結果, 這裡的遞歸語法引用是拿引用的子模式重新匹配。)
目標字符串的最大長度是int 型變量可以存儲的最大正整數。然而, PCRE 使用遞歸處理子組和無限重複。 這就是說對於某些模式可用的堆疊空間可能會受目標字串限制。