@
liuyao729 首先声明,我不会 PHP 也没有测试环境,只是上网查了一下 PHP 的替换函数。
用了一个在线执行 PHP 代码的网站进行的测试(PHP5),
该正则比较简陋并且对 <a href="http://xx?q=http://"></a> 会误判:
$text = 'http://abc<a href="http://xxx">xsx</a>
http://v2ex.com https://abc<img />abd';
print preg_replace('%(?<!"|\')https?://[^\s<]+%', '<a href="$0">$0</a>', $text);
//<a href="http://abc">http://abc</a><a href="http://xxx">xsx</a> <a href="
http://v2ex.com">
http://v2ex.com</a> <a href="https://abc">https://abc</a><img />abd