導航:首頁 > 編程語言 > 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執行正則表達式相關的資料

熱點內容
linux屏幕鎖定 瀏覽:502
rar高壓縮軟體 瀏覽:855
linuxshell編程的作用 瀏覽:566
傳奇世界單機gm命令 瀏覽:966
遺傳演算法tsppython 瀏覽:281
單片機數字溫度 瀏覽:138
工行發工資app是什麼 瀏覽:846
程序員技術牛 瀏覽:713
浪潮雲伺服器山東虛擬主機 瀏覽:17
使用孤行控制命令 瀏覽:256
javaawtimage 瀏覽:748
命令方塊物品 瀏覽:410
愛好者游戲解壓碼 瀏覽:593
伺服器網路的局限性有什麼 瀏覽:570
b站解析伺服器地址 瀏覽:492
macpdf轉word 瀏覽:310
電路設計怎麼編譯結果 瀏覽:191
安卓伺服器怎麼設置語言 瀏覽:173
反編譯文件為什麼會錯誤 瀏覽:790
史上最牛游戲程序員 瀏覽:32