簡體   English   中英

php正則表達式將兩個html標記之間的字符串與未知的標記進行匹配

[英]Php regex match a string between two html tags with the tags been unknown

好的,這是我的問題:

我有一個鏈接,說: http : //www.blablabla.com/watch?v= 1lyu1KKwC74& feature= list_other& playnext=1&list=AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV

鏈接位於兩個標簽之間,如下所示:

<br>http://www.blablabla.com/watch?v=1lyu1KKwC74&feature=list_other&playnext=1&list=AL94UKMTqg-9CfMhPFKXPXcvJ_j65v7UuV<br></p>

將此正則表達式與preg_replace一起使用:

'@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i'

因此:

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "***",$strText);

結果字符串是:

<br***p>

哪有錯!

應該是

 <br>***<br></p>

如何獲得理想的結果? 我已經竭盡全力試圖解決這一問題。

我想提到str_replace甚至替換了另一個有效鏈接中的鏈接,所以這不是一個好方法,即使邊界是文本或另一個HTML標記,我也需要兩個邊界之間的精確匹配。

假設由於某些原因您不想使用DOM解析器,我相信您可以按照以下說明進行操作:

preg_replace('@(^|[^\/]|[^>])('.addcslashes($link,'.?+').')([^\w\/]|[^<]$)@i', "$1***$3",$strText);

這將使用$ 1和$ 3放回您在正則表達式中匹配的定界文本。

正如其他人指出的那樣,使用DOM解析器更為可靠。

這是您想要的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM