正則是否能處理括號配對的正則匹配.
比如, 對於如下的待匹配的字串:
((()))就是乙個括號配對的字串. 而對於如下的待匹配字串:
((()則不是乙個括號配對的字串.
在以前, 這種情況, 正則無法處理, 最多只能處理固定層數的遞迴, 而無法處理無線遞迴的情況… 而在perl 5.6以後, 引入了乙個新的特性: recursive patterns, 使得這種需求可以被正確的處理.
recursive pattern引入了乙個新的符號(?r), 這個符號可以表示: 正則模式本身, 比如:
#1(?r)*#這個正則, 首先它匹配數字」1″, 然後(?r)*表示, 正則式本身, 也就是說, 可以認為是:
#1(正則本身(正則本身).....)*#於是, 對於文章開頭說到的情況:」括號配對」, 可以寫下如下的正則式:
#\((?r)*\)#就可以正確處理.
這裡提醒一下, 用的時候, 要注意一定要給遞迴乙個截至條件, 比如如果上面的例子寫成:
#1(?r)#那麼, 就不會正常工作, 因為這個展開以後表示要匹配無限多個」1″, 所以在上面的例子中, 寫作了(?r)*, 讓它可以有乙個截止的條件(可以為0個).
另外, 這個新特性也支援序號引用(?index), 比如:
#(1)(2)(3)(?3)(?2)(?1)#表示匹配, 123321.
如果想更多的了解這個新特性, 可以參看:
php zhegnze PHP正則之遞迴匹配
我記得早前有同事問,正則是否能處理括號配對的正則匹配.比如,對於如下的待匹配的字串 就是乙個括號配對的字串.而對於如下的待匹配字串 則不是乙個括號配對的字串.在以前,這種情況,正則無法處理,最多只能處理固定層數的遞迴,而無法處理無線遞迴的情況.而在perl 5.6以後,引入了乙個新的特性 recur...
python 遞迴正則匹配
需要提取 發熱 低熱 37.3 38 c 乏力,腹痛 下腹痛,一側腹痛 中的 發熱,乏力,腹痛 即去除括號內的內容 包含括號,括號可能巢狀 好像可以用 平衡組 遞迴匹配 但不知道怎麼用python實現,用nestedexpr貌似可以實現。from pyparsing import nestedexp...
PHP 正則匹配a標籤
php匹配固定class鏈結的a標籤 使用修飾詞大寫的u轉換為非貪婪模式 要不然會從文中的第乙個a標籤的開頭 匹配到最後乙個a標籤的結尾 c u 還可以直接使用非貪婪的正則.c 這個a標籤不要匹配 asdad str aaa bbbccc c u preg match all c,str,match...