[英]Replace all urls in string not matching url pattern in php
我正在使用以下代碼從PHP中的HTML文本塊中過濾出URL。
preg_replace('#<a(?![^>]+?href="?http://keepthisdomain.com/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);
它旨在替換所有與指定的網址格式不匹配的網址。 但是,我確實要包括所有設置了rel =“ shadowbox [a]”屬性的標簽。
如何修改此preg_replace來做到這一點?
出於此答案中所述的原因 ,最好不要使用正則表達式,而應使用解析器。
也就是說,您可以使用正則表達式來做到這一點,但這很棘手:
preg_replace('#<a(?![^>]+?\bhref="?http://keepthisdomain\.com/foo/bar"?|[^>]+\brel="shadowbox\[a\]").*?>(.*?)</a>#i', '\1', $text);
正則表達式的詳細信息:
<a(?![^>]+?\bhref="?http://keepthisdomain\.com/foo/bar"?|[^>]+\brel="shadowbox\[a\]").*?>(.*?)</a>
在以下四個標簽中,只有第三個將被替換:
<a href="http://keepthisdomain.com/foo/bar">foo</a> // left alone
<a href="http://keepthisdomain.com/foo/bar" rel="shadowbox[a]">foo</a> // left alone
<a href="http://rejectthis.com/foo/bar">foo</a> // REPLACED
<a href="http://rejectthis.com/foo/bar" rel="shadowbox[a]">foo</a> // left alone
進行了細微的編輯,使之與文字匹配.
在.com
,使用\\.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.