1、效率当然是正则越少越好;
2、
$str = "<a href='../aaa'>鲜花</a>";
$tip = urlencode(preg_replace("/<a.+href=.+>(.+)<\/a>/Usi","\\1",$str));
$str = preg_replace("/(<a.+href=')(.+)('>.+<\/a>)/Usi","\\1list.php?q=$tip\\3",$str);
echo $str;
2、
$str = "<a href='../aaa'>鲜花</a>";
$tip = urlencode(preg_replace("/<a.+href=.+>(.+)<\/a>/Usi","\\1",$str));
$str = preg_replace("/(<a.+href=')(.+)('>.+<\/a>)/Usi","\\1list.php?q=$tip\\3",$str);
echo $str;
"<a href=list.php?q=".urlencode('\${1}').">\${1}</a>",
"<a href='../aaa'>鲜花</a>");?>
你的代码,如果只匹配一次还可以,如果匹配很多次的话就有问题了。to zhiin(稚鹰@南通):
你的代码怎么不行,href=list.php?q=\${1}了to Gdj(陈水.智商只有129.非卖品) :
我不太明白,你能说清楚一点吗?
"<a href=list.php?q=".urlencode('\\1').">\\1</a>",
"<a href='../aaa'>鲜花</a>");?>
--------------------------------- PHP5现在推荐用这种方法, 我用的很好啊~
楼主这样试试:<?phpecho preg_replace("/<a\shref=\'..\/[^\']*\'>([^<]*)<\/a>/",
"<a href=list.php?q=".urlencode('\1').">\\1</a>",
"<a href='../aaa'>鲜花</a>");?>
如果还不行, 这样:<?phpecho preg_replace("/<a\shref=\'..\/[^\']*\'>([^<]*)<\/a>/e",
"<a href=list.php?q=".urlencode('\1').">\\1</a>",
"<a href='../aaa'>鲜花</a>");?>再不行就用回调函数!
如果还不行那我就无能为力了:(~~
$str = "<a href='../aaa'>鲜花</a><a href='../bbb'>礼品</a>";
echo preg_replace("/<a\shref=\'..\/[^\']*\'>([^<]*)<\/a>/e","'<a href=list.php?q='.urlencode('$1').'>$1</a>'",$str);
?>大家的一些例子没有通过可能是因为php版本的问题.在此谢谢大家了.
恩,虽然\${1}是PHP5里被推荐的,但是我在一些PHP版本比较旧的环境下测试,会出错。。
我记得以前测试是4.1.x还是4.0.x了