简单的preg替换我想不通

时间:2014-04-06 07:24:47

标签: php preg-replace

我花了几个小时试图解决这个问题,但我无法得到它。我只是希望preg_replace仅从锚标记中删除http://。我试过这个str_replace,但正如您已经知道它在preg_replace内无效:

$site = preg_replace('/<a href="(.*?)">/','<a href="mypage.php?url='. str_replace("http://", "", "$1") .'">', $site);

我只希望任何锚点链接删除http://部分,但不是图像链接,因此它不会破坏&lt; img src =&#34; .....&#34; &GT; 标签。只有锚标签的网址。实际上,如果你可以删除http://和www。这也很棒。因此,http://google.comhttp://www.google.com将显示为google.com。感谢。

1 个答案:

答案 0 :(得分:1)

$1不是真正的变量,因此您无法在其上使用str_replace

试试这个:

$site = preg_replace('/<a href="http:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site);

只需将http://放在模式中,即可确保它不在$1中。当然,你需要通过在它前面放一个反斜杠来逃避/。因此:\/\/

如果你需要这个也适用于https,请尝试:

$site = preg_replace('/<a href="https?:\/\/(.*?)">/','<a href="mypage.php?url=$1">', $site);

?之后的s将允许其存在与否。当然,这会将链接https://google.com重写为mypage.php?url=google.com,这可能不是您想要的(您不再知道它是http还是https)

对于www。部分:

$site = preg_replace('/<a href="https?:\/\/(www\.|)(.*?)">/','<a href="mypage.php?url=$2">', $site);