php:通过链接替换url,除非它是图片标记

时间:2013-03-05 22:34:21

标签: php url preg-replace image detect

我使用一个脚本来检测字符串中的url并用锚标记替换它:

$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$mytext);
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>",$string);
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<a href=\"mailto:$1\">$1</a>",$string);

它工作正常,除非它遇到图像标记。例如:

<img src="http://www.xx.com/img.jpg" alt=""/>

将成为:

<img src="<a href="http://www.xx.com/img.jpg">http://www.xx.com/img.jpg</a>http://www.xx.com/img.jpg" alt=""/>

如果' src =“'就在它之前,我应该如何修改这个preg_replace以便不改变网址?

谢谢

1 个答案:

答案 0 :(得分:0)

尝试在每个正则表达式结束时/之前添加此权限:

(?<!\.(?:jpe?g|png|gif))

这应检查以确保最后一位(扩展部分)不是标准图像格式之一。