我正在使用以下代码从PHP中的HTML文本块中过滤掉网址。
preg_replace('#<a(?![^>]+?href="?http://keepthisdomain.com/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);
它旨在替换与指定的url模式不匹配的所有url。但是我确实想要包含属性为rel =“shadowbox [a]”的所有标签。
如何修改此preg_replace来执行此操作?
答案 0 :(得分:0)
对于the reasons set forth in this answer,最好不要使用正则表达式并使用解析器。
那就是说,你可以用正则表达式来做,但这很棘手:
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
中的文字\.
匹配