替换字符串中不匹配模式的所有url

时间:2014-01-29 21:02:44

标签: php regex preg-replace

我正在使用此代码替换字符串中的网址

preg_replace('#<a.*?>(.*?)</a>#i', '\1', $text)

我如何做同样的事情,但保持匹配特定模式的网址(即从我想要保留的域开始)?

更新

原来我想要保留的网址包括相对网址,所以我现在想要删除所有与给定网址格式不匹配且不是相对链接的网址。

1 个答案:

答案 0 :(得分:1)

你需要一个负面的预见断言:

preg_replace('#<a(?![^>]+?href="?http://keepthisdomain.com/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);

编辑:如果您只想匹配相关域,则逻辑相同。只需取出协议和域名:

preg_replace('#<a(?![^>]+?href="?/?path/to/foo/bar"?).*?>(.*?)</a>#i', '\1', $text);

?之后的"/表示这些字符是可选的。因此,第二个示例适用于path/to/foo/bar/path/to/foo/bar