preg_replace regex用于替换其中URL不是sample.com的锚标记

时间:2016-04-16 20:58:55

标签: php regex preg-replace

我有preg_replace的正则表达式,它取代了锚点标记,其中某些URL(例如sample.com)存在于href中。现在我需要的是一个正则表达式,它将替换所有其他不包含某些URL的锚标签(例如sample.com)。

这是我的正则表达式:

$rw     =   "Go to hell";
$message    =   "<a href='http://twitter.com'>Twitter</a><br/><a href='http://google.com'>Google</a><br/><a href='http://facebook.com'>Facebook</a>";
$message   =   preg_replace("/<a[^>]*\bhref\s*=\s*'(?:[^']*google.com[^']*|[^][^']*facebook.com[^']*)'>(.*)<\/a>/siU", $rw, $message);

结果是:

Twitter (with link)
Go to hell 
Go to hell 

我需要什么:

Go to hell
Google (with link)
Facebook (with link)

1 个答案:

答案 0 :(得分:0)

如下所示更改正则表达式模式(使用 lookahead negative assertion ?!):

...
$message = preg_replace("/<a[^>]*\bhref\s*=\s*'https?:\/\/(www)?(?!(google\.com|facebook\.com))[^']*'>(.*)<\/a>/siU", $rw, $message);

print_r($message);

输出将是:

Go to hell
Google (with link)
Facebook (with link)