簡體   English   中英

替換字符串中與php中的網址格式不匹配的所有網址

[英]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.

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