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

怎么在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在线有码| 亚洲精品一区二区成人影院| 国产一区免费二区三区四区| 杨幂一区二区在线观看| 亚洲av成人在线播放| 少妇二区三区精品视频| 国产精品99久久久久久| 一区二区三区av天堂| 国产av一区二区三区最新精品| 亚洲新大香蕉视频在线播放| 婷婷亚洲悠悠色悠在线| 国模在线视频一区二区| 亚洲成熟中老妇女视频| 精品日韩av一区二区三区| 激情男女一区二区三区| 国产成人亚洲一区二区三区| 青青草老司机在线视频| 国产黄片a三级久久久久久| 成人精品超碰一区二区| 福利视频免费观看欧美| 视频一区二区日韩不卡| 日韩欧美麻豆不卡一区二区| av黄色资源在线观看| 亚洲精品日韩一区二区| 18禁黄网站免费视频| 一区二区三区乱码av| 久久国产亚洲欧美日韩精品| 青青草免费在线视频蜜臀| 人妖伪娘在线观看一区二区三区| 成人作爱视频免费播放| 午夜精品久久久免费视频| 国产精品一区二区熟女| 深夜成人免费观看视频| 偷拍色图一区二区二区| 日韩无遮挡免费在线观看| 熟妇人妻精品一区二区三区颏| 日韩欧美亚洲国产一区久久精品| av资源在线观看少妇丰满| 久久精品夜夜夜夜夜久久| 中文字幕一区免费视频|