欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在PHP中使用遞歸正則表達式-創(chuàng)新互聯(lián)

這篇文章給大家介紹怎么在PHP中使用遞歸正則表達式,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

為呈貢等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及呈貢網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計制作、成都網(wǎng)站建設、呈貢網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

什么時候會用到遞歸正則表達式呢? 當然是待匹配的字串中遞歸地出現(xiàn)某種模式時(貌似廢話). 最經(jīng)典的例子, 就是遞歸正則處理嵌套括號的問題了. 例子如下.

假設你的文本中包含了正確配對的嵌套括號. 括號的深度可以是無限層. 你想捕獲這樣的括號組.


復制代碼 代碼如下:


<?php
$string = "some text (a(b(c)d)e) more text";
if(preg_match("/\(([^()]+|(?R))*\)/",$string,$matches)) {
echo "<pre>"; print_r($matches); echo "</pre>";
}
?>



結果是:


復制代碼 代碼如下:


Array
(
[0] => (a(b(c)d)e)
[1] => e
)



可見, 我們所需要的文本, 已經(jīng)捕獲到$matches[0]中了.

原理

現(xiàn)在思考原理.

上面的正則表達式中的關鍵點是(?R). (?R)的作用就是遞歸地替換它所在的整條正則表達式. 在每次迭代時, PHP 語法分析器都會將(?R)替換為”\(([^()]+|(?R))*\)“.
因此, 具體到上述的例子, 其正則表達式等價于:


復制代碼 代碼如下:


"/\(([^()]+|\(([^()]+|\(([^()]+)*\))*\))*\)/"



但是上面的代碼只適合深度為3層的括號. 對于未知深度的括號嵌套, 就只好使用這種正則了:


復制代碼 代碼如下:


"/\(([^()]+|(?R))*\)/"



它不但能夠匹配無限深度, 還簡化了正則表達式的語法. 功能強大, 語法簡潔.

現(xiàn)在來細看一下"/\(([^()]+|(?R))*\)/"是怎樣匹配"(a(b(c)d)e)"的:

"(c)"這部分被正則式 "\(([^()]+)*\)" 匹配. 請注意, (c) 其實就相當于整個遞歸的一個縮影, 麻雀雖小五臟俱全, 因此它用到了整個正則表達式.
換言之, 下一步中的(c), 可以使用(?R) 來匹配.

(b(c)d)的匹配過程為:
"\("匹配"(";
"[^()]+"匹配"b";
(?R)匹配"(c)";
"[^()]+"匹配"d";
"\)"匹配")".

根據(jù)上面的匹配原理, 不難理解為什么數(shù)組的第2個元素$matches[1]與'e'等價. 子串'e'是在最后一次匹配迭代中被捕獲. 匹配過程中, 只有最后一次的捕獲結果才會保存到數(shù)組中.
關于這個特性, 可以自行嘗試一下, 看看使用正則式([a-z]+[0-9]+)+來匹配字串a(chǎn)bc123xyz890, 其捕獲結果$1是什么. 注意, 其結果與 Left Longest 原理并不沖突.

如果我們只需要捕獲 $matches[0], 可以這樣做:


復制代碼 代碼如下:


<?php
$string = "some text (a(b(c)d)e) more text";
if(preg_match("/((?:[^()]+|(?R))*)/",$string,$matches))
{
echo "<pre>"; print_r($matches); echo "</pre>";
}
?>
產(chǎn)生的結果相同:

Array
(
[0] => (a(b(c)d)e)
)



所做的改動是捕獲括號()改為非捕獲捕獲括號(?:)了.

還可以進一步完善為:


復制代碼 代碼如下:


<?php
$string = "some text (a(b(c)d)e) more text";
if(preg_match("/((?>[^()]+|(?R))*)/",$string,$matches))
{
echo "<pre>"; print_r($matches); echo "</pre>";
}
?>


關于怎么在PHP中使用遞歸正則表達式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當前文章:怎么在PHP中使用遞歸正則表達式-創(chuàng)新互聯(lián)
分享鏈接:http://aaarwkj.com/article38/cogosp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、域名注冊、網(wǎng)站設計、定制開發(fā)、網(wǎng)站排名、網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
人妻中文字幕av资源| 日本欧美三级高潮受不了| 国产欧美日韩一二三四| 国产精品盗摄一区二区三区| 最新91精品国产自产在线| 成年女人毛片免费观看不卡| 91出品国产福利在线| 国产三级精品三级在线专区1| 国产一区999精品在线| 欧美激情欧美精品欧美色浮| 亚洲码与欧洲码一二三| 视频一区二区三区拍拍| 亚洲国产成人午夜精品| 欧美另类亚洲综合久青草| 国产精品久久久久精品三级中文国 | 97成品视频在线播放| 99热成人精品热久久| 欧美日韩亚洲国产专区精品| 日产极品一区二区三区| av天堂官网在线人妻| 国产三级网站在线观看| 欧美黄片网站免费观看| 日韩欧美中文在线一区二区| 国产欧美日韩综合91| 国产大学生露脸在线视频| 日本女优高清不卡一二三四区| 97视频高清在线观看| 日本激情精品在线观看| 欧美日韩免费一区二三区| 香蕉伊蕉伊中文在线视频| 亚州精品少妇久久久久久| 女同蝴蝶在线看完整版| 国产精品日本一区二区| 久久精品一本久久99精品| 国产精品一区二区婷婷| 国产高清内射一级一片高清视频| 久久精品国产亚洲av高清大结局 | 中文字幕一区二区三区精彩视频| 欧美在线观看日韩精品| 国产精品午夜福利亚洲综合网| 日本精品a秘在线观看|