6. 遞歸(Recursion)
遞歸(Recursion)用于匹配嵌套結(jié)構(gòu),例如括弧嵌套, (this (that)),HTML標(biāo)簽嵌套 。我們使用(?R)來代表遞歸過程中的子模式。下面是一個匹配嵌套括弧的例子:
/\(((?>[^()]+)|(?R))*\)/
最外層使用了反義符的括號“(”匹配嵌套結(jié)構(gòu)的開端。然后是一個多選項操作符( * | * ),可能匹配除括號外的所有字符 “(?>[^()]+)”,也可能是通過子模式“(?R)”來再次匹配整個表達式。請注意,這個操作符會盡量多地匹配所有嵌套。 遞歸的另一個實例如下:
/< ([\w]+).*?>((?>[^<>]+)|((?R)))*< \/\1>/
以上表達式綜合運用了字符分組,貪婪操作符、回溯,以及最小化組團來匹配嵌套標(biāo)簽。第一個括弧內(nèi)分組([\w]+)匹配出標(biāo)簽名,用于接下來的應(yīng)用。若找到這尖括號樣式的標(biāo)簽,則嘗試尋找標(biāo)簽內(nèi)容的剩余部分。下一個括弧括起來的子表達式和上一個實例非常相似:要么匹配不包括尖括號的所有字符 ?>[^<>]+,要么遞歸匹配整個表達式(?R)。表達式最后的< \/1>代表閉合標(biāo)簽。
出處:笨活兒
責(zé)任編輯:bluehearts
上一頁 最小組團(Atomic Groups) 下一頁 回調(diào)(Callbacks)
◎進入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|