我想替换HTML源代码中的超链接,在超链接前加上 /?url= 。如:
$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!';
我想将其中的链接替换为:网易10余年来一直致力于为广大用户提供方便又贴心的<a href="/?url=http://www.163.com/mail.html">电子邮件</a>服务,<a href="/?url=http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
请教应该怎么写 preg_replace 中的正则表达式?如果要让 http://www.mydomain.com 开头的不替换,又怎么写呢。谢谢。
$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!';
我想将其中的链接替换为:网易10余年来一直致力于为广大用户提供方便又贴心的<a href="/?url=http://www.163.com/mail.html">电子邮件</a>服务,<a href="/?url=http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
请教应该怎么写 preg_replace 中的正则表达式?如果要让 http://www.mydomain.com 开头的不替换,又怎么写呢。谢谢。
$str = preg_replace('/<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>/i','<a$1href="/?url=$2"$3>$4</a>',$str);
echo $str;
<?php
function chgurl($matches)
{
return preg_match('/www\.mydomain\.com/i',$matches[0]) ? $matches[0] : '/?url='.urlencode($matches[0]);
}$str = '网易10余年来一直致力于为广大用户提供方便又贴心的<a href="http://www.163.com/mail.html">电子邮件</a>服务,
<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>';$str = preg_replace_callback('/(?<=href=")http:[^"]*(?=")/i','chgurl',$str);
var_dump($str);
?>
<a href="http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>';echo preg_replace('#(http://)(?!www.mydomain.com)#', '/?url=$1', $str);
out:
网易10余年来一直致力于为广大用户提供方便又贴心的<a href="/?url=http://www.163.com/mail.html">电子邮件</a>服务,
<a href="/?url=http://mail.163.com/" target="_blank">网易邮箱</a>因您的需求而卓越!
信息来源:<a href="http://www.mydomain.com">自己的网站</a>,<a href="abc.html">某链接</a>