繁体   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