晕 这么简单的问题居然没一个像样的回答 这里正则表达式写得最好的应该是muxrwc了 LZ给分不公啊 PHP可以使用perl的正则表达式引擎 应该有递归查询的另外这样的替换没必要一定是一条表达式完成.多几次替换能轻松完成所需var str = str.replace(/<[^>]*?baidu[^>]*>/ig,"[key word backup]").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
var str = str.replace(/<[^>]*?baidu[^>]*>/ig,"[key word backup]").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
//上面的有点问题 var str = str.replace(/(<[^>]*?)baidu([^>]*>)/ig,"$1[key word backup]$2").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
除了www.baidu.com外的baidu都替换为<b>baidu</b>该怎么写?
echo preg_replace("/(?<!www\.)(baidu)(?!\.com)/","<b>\\1</b>",$s);
<script type="text/javascript">var a='baid,baidu,baidu,google,baidu <a href="http://www.baidu.com"> baidu </a> '
alert(a.replace(/(?!www\.)baidu(?!\.com)/g,"<b>baidu</b>"))
</script>
$replace = "\$1<b> baidu </b>$3";
$str = '<a href="http://www.baidu.com.com" > baidu baid </a><a href="http://www.baidu.com.com" > 12312 google </a>';
$res = preg_replace( $search, $replace, $str );
exit($res);
如:
baidu,baidu,baidu,google,baidu <a href="http://www.baidu.com"> baidu </a>
baidu,baidu<a href="http://baidu.com">baidu</a>baidubaidu<a href="cache.baidu.cn">摆渡</a>
.....
替换为
<b>baidu</b>,<b>baidu</b>,<b>baidu</b>,<b>baidu</b>,<b>baidu</b> <a href="http://www.baidu.com"><b>baidu</b></a>
<b>baidu</b>,<b>baidu</b><a href="http://baidu.com"><b>baidu</b></a><b>baidu</b><b>baidu</b><a href="cache.baidu.cn">摆渡</a>
...
一会又<a href="http://www.baidu.com"> www.baidu.com </a> 替换为 <a href="http://www.baidu.com">www.<b>baidu</b>.com </a> <b> 。
[/code]
到底是什么意思呢?
<script type="text/javascript">var a='baidu,baidu,baidu,google,baidu <a href="http://www.baidu.com"> baidu </a>baidu,baidu <a href="http://baidu.com"> baidu </a> baidubaidu <a href="cache.baidu.cn"> www.baidu.com </a>'
alert(a.replace(/baidu/g,"<b>baidu</b>").replace(/(<(a|img).*?)<b>baidu<\/b>(.*?>)/g,'$1baidu$3'))
</script>使用的时候(a|img)这个地方可能要扩展
var key = "baidu", nkey = "<b>baidu<\/b>";
var pattern = new RegExp("(<a(?:\"[^\"]*\"|'[^']*'|[^\"'>]+)*>)([\\S\\s]+?)<\\/a>|" + key, "ig");
var str = 'baidu,baidu,baidu,google,baidu <a href="http://www.baidu.com"> baidu,baidu </a>baidu,baidu <a href="http://baidu.com"> baidu </a> baidubaidu <a href="cache.baidu.cn"> www.baidu.com </a>'
alert(str.replace(pattern, function (a, b, c) {
if (b && c) {
return b + c.replace(new RegExp(key, "ig"), nkey);
} else {
return nkey;
}
}));
</script>
飘走...
<HEAD><META http-equiv="Content-Type" content="text/html; charset=GBK">
<META name="GENERATOR" content="IBM WebSphere Studio">
<META http-equiv="Content-Style-Type" content="text/css">
<LINK href="theme/Master.css" rel="stylesheet" type="text/css">
<TITLE>告示版</TITLE></HEAD>
<BODY>字符串:
<p><textarea id="tt" cols="80" rows="5"></textarea>
</p>
替换后字符串:
<p><textarea id="tt1" cols="80" rows="5"></textarea>
</p>
效果预览:
<p>
<div id="tt2"></div>
</p>
</BODY>
<script language="javascript">
//var key = "baidu", nkey = "<b>baidu<\/b>";
//var pattern = new RegExp("(<a(?:\"[^\"]*\"|'[^']*'|[^\"'>]+)*>)([\\S\\s]+?)<\\/a>|" + key, "ig");
var str = 'baidu,baidu,baidu,google,baidu <a href="http://www.baidu.com"> baidu,baidu </a>baidu,baidu <a href="http://baidu.com"> baidu </a> baidubaidu <a href="cache.baidu.cn"> www.baidu.com </a>'
var tt=str.replace(/baidu/g, "<b>baidu<\/b>").replace(/(<a.*?)(<b>baidu<\/b>)(.*?>)/g,"$1baidu$3")
document.getElementById("tt").value=str
document.getElementById("tt1").value=tt
document.getElementById("tt2").innerHTML=tt
</script></HTML>
$content=eregi_replace("($keyws[$i])","<span class=\"keyword\">\\1</span>",$content);
while(preg_match("/(<[^>]*?)<span class=\"keyword\">($keyws[$i])<\/span>([^>]*?>)/i",$content))
{
$content=preg_replace("/(<[^>]*?)<span class=\"keyword\">($keyws[$i])<\/span>([^>]*?>)/i","\$1\$2\$3",$content);
}
}
这是我的解决方案,再次感谢各位的支持。
LZ给分不公啊
PHP可以使用perl的正则表达式引擎 应该有递归查询的另外这样的替换没必要一定是一条表达式完成.多几次替换能轻松完成所需var str = str.replace(/<[^>]*?baidu[^>]*>/ig,"[key word backup]").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");
var str = str.replace(/(<[^>]*?)baidu([^>]*>)/ig,"$1[key word backup]$2").replace(/baidu/ig,"<b>baidu</b>").replace(/\[key word backup\]/ig,"baidu");