導航:首頁 > 編程語言 > php執行正則表達式

php執行正則表達式

發布時間:2025-05-05 23:43:32

A. 怎麼用php正則獲得a標簽內的文字啊

php中正則匹配只要使用這兩個函數:

preg_match_all

preg_match

這里使用preg_match_all,代碼如下:

$subject='<ahref="xxx.php">abc測試</a>';//假設這是需要匹配的字元串

$pattern='/<ahref="[^"]*"[^>]*>(.*)</a>/';//這是匹配的正則表達式

preg_match_all($pattern,$subject,$matches);//開始匹配,該函數會把匹配結果放入$matches數組中


echo"<pre>";
print_r($matches);
/**
結果是:

Array
(
[0]=>Array
(
[0]=>abc測試
)

[1]=>Array
(
[0]=>abc測試
)

)

*/

B. php正則表達式

優先匹配哪個?
通常是優先匹配左邊的(從左往右執行嘛,然後又因為有貪婪性,比如[0-9]*[0-9]*去匹配123,左邊的[0-9]*會匹配到12,右邊的[0-9]*會匹配到3),正則表達式左邊的部分會匹配到能是能使匹配成功的最長的匹配,具體原因如下:
貪婪、回溯和正則導向引正則擎的急切性:正則的{}和*合+有具貪婪性會向後匹配到他們可以匹配的盡可能多的字元串。但是如果重復性的匹配會引起整個(後面的)正則表達式匹配失敗時,會引起回溯,放棄最後一次重復匹配(相當於剩餘的字元串從左邊增加了一位),用表達式後面的部分匹配剩餘的字元串。在前面的正則匹配成功後立即用剩餘的表達式部分繼續匹配後面的內容,如果匹配成功會立刻返回匹配成功,不會繼續回溯(php的正則表達式引擎室正則導向的)


裡面的(.*)是怎麼找得?
*有具貪婪性會向後匹配到.可以匹配的最大長度的字元串,最初匹配到-2011-2012,然後因為回溯不斷減少匹配的值,直到匹配-201。

過程是怎樣的,
執行順序:
1.[0-9]{2,4}會先匹配到2010,
2.然後(.*),因為*得貪婪性會匹配到後面所有.能匹配的字元-2011-2012。
3.此時表達式執行到[0-9]{1,2},因為[0-9]{1,2}此時沒有任何可以匹配的內容,所以引起回溯(.*)匹配到前一次匹配結果的倒數第2位重新匹配到-2011-201,[0-9]{1,2}與最後一位匹配成功得到字元串最後面的2,因為正則引擎的急切性,匹配成功後會立即用正則表達式剩餘的部分繼續向後匹配。
4.此時表達式執行到\1,字元串後面沒有剩下任何東西所以\1 (\1指(.*)匹配的結果-2011-201)匹配失敗,然後引起回溯。[0-9]{1,2}向前移一位,結果[0-9]{1,2}沒有字元可以進行匹配操作,匹配失敗。引起回溯,(.*)匹配到前一次匹配結果的倒數第2位重新匹配到-2011-20,再用[0-9]{1,2}匹配得到12,後面依然沒有字元與\1匹配,引起回溯,此次[0-9]{1,2}匹配到1,\1(此時值為-2011-20)與2匹配再次失敗。於是重復上面的回溯【此處省去n百字,總之是重復上面的回溯】,直到(.*)匹配到-201,\1匹配到了-2012中的-201,因為正則導向的正則引擎是急切的,不再進行回溯,繼續後面的匹配。
5.最後,[0-9]{1,2}與字串剩餘部(最後一個字元)2匹配成功返回,因為正則導向的正則引擎是急切的,所以立刻返回匹配結果,不再進行回溯。

睡覺前看到的沒想到寫出來這么難,不過也沒白寫,就當總結了。

閱讀全文

與php執行正則表達式相關的資料

熱點內容
安卓機便簽繪畫怎麼放大 瀏覽:387
對啊app電子教材怎麼下載 瀏覽:338
地下車庫加密多少合適 瀏覽:688
pythonmysql配置 瀏覽:577
雲伺服器密碼生成器 瀏覽:987
碼頭提還櫃app怎麼操作的 瀏覽:836
三國志11漢化包在哪個文件夾 瀏覽:926
java訂單系統源碼 瀏覽:487
php開源視頻系統 瀏覽:222
程序員自我隔離 瀏覽:97
kd與其它指標疊加源碼圖片 瀏覽:792
arcgis在雲伺服器上安裝無反應 瀏覽:953
伺服器bmc刷一半怎麼辦 瀏覽:371
phppdf列印 瀏覽:665
向量范數的源碼 瀏覽:81
查找隱藏的文件夾win7 瀏覽:596
怎麼才能玩我的世界正版伺服器 瀏覽:147
郵箱中發件伺服器是什麼 瀏覽:219
菜鳥app怎麼設置快遞不放菜鳥驛站 瀏覽:795
android文件內容獲取 瀏覽:719