示例:
<a href="http://conis.cn" title="涂雅">跳转到涂雅</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />替换掉“涂雅”conis.cn,结果为:<a href="http://conis.cn" title="涂雅">跳转到conis.cn</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />请教一下,呵呵,谢谢
<a href="http://conis.cn" title="涂雅">跳转到涂雅</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />替换掉“涂雅”conis.cn,结果为:<a href="http://conis.cn" title="涂雅">跳转到conis.cn</a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />请教一下,呵呵,谢谢
$pat = '@<a(.[^>]*)>(.*)(涂雅)(.*)</a>@';
$rep = '<a$1>$2conis.cn$4</a>';echo preg_replace($pat,$rep,$str);
//不知这个答案是不是你想要的 ?
已知的就是要对<tag></tag>以外内容进行替换,所以我觉得这个正则不能解决这个问题
继续求解php中有没有反向引用的正则,不知道php用的是那个正则的流派
$str = '
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
';
$str = preg_replace('/(>.*)(涂雅)(.*<)/U','\1conis.cn\3',$str);
echo '<xmp>';
var_dump($str);
?>
感谢
不过我还真没见过这种写法,甚至有些不太明白
如果有时间,能否解释一下这个正则?
我弄正则也有不少时间了,一方面道行比较浅,另一方面也因为主要是在js和c#下,没有在php下弄过正则,
呵呵,还希望能赐教。
'/(>.*)(涂雅)(.*<)/U'
有三个捕获组,分别是(>.*)、(涂雅)、(.*<)
第一个捕获组匹配html标签结尾的尖括号>,然后后面匹配零个或者多个任意字符
第二个捕获组匹配关键字
第三个捕获组同第一个捕获组相同,不过是以左尖括号结尾然后以第一个捕获组+要替换的关键字+第三个捕获进行替换觉得好像不太对,如果我理解是对的,那结果应该不是这样子,呵呵
2. 江南昆虫那个是匹配abc1,不包括abc2的情况
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" /> ';
$str = preg_replace('/(>.*)(涂雅)(.*<)/U','\1conis.cn\3',$str);
echo '<xmp>';
var_dump($str); ?>第二个涂雅无法替换,还请江南昆虫帮一下忙,感谢
{
$temp = $str;
$str = preg_replace('/(>.*)(涂雅)+(.*<)/U','\1conis.cn\3',$temp);
}
$str = '11 涂雅22<a href="http://conis.cn" title="涂雅">跳转到涂雅涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" /> 33涂雅44';
$str = preg_replace_callback('/(^|>).*涂雅.*(<|$)/U',create_function('$m', 'return str_replace("涂雅","conis.cn",$m[0]);'),$str);
echo '<xmp>';
var_dump($str);
?>
如果先匹配html标签, 再一个反转替换, 这样的正则好像很难写
昨晚想了一晚, 以为只用一个正则能搞定, 结果还是要其它辅助 ?
$str = '11 涂雅22<a href="http://conis.cn" title="涂雅">跳转到涂雅涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" />
<a href="http://conis.cn" title="涂雅">跳转到涂雅 </a>
<img src="http://conis.cn/test.jpg" alt="涂雅" /> 33涂雅44';//keyword[i]+"(?=[^<>]*<)","ig"
//$pattern = '/(>.*)(a)(.*<)/U';
$pattern = "/(涂雅)(?=[^<>]*<)/";
$str = preg_replace($pattern,'<a href="http://conis.cn">\1</a>',$str); echo '<xmp>';
var_dump($str);
?>