求一段 替换 代码 匹配某一个关键字 然后 替换 而且这个替换次数 是可以控制的谢谢了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $s = '匹配某一个关键字 然后 替换 而且这个替换次数 是可以控制的';function foo($r) { global $num; if($num--) return "<b>$r[0]</b>"; return $r[0];}$num = 1;$key = '替换';echo preg_replace_callback("/$key/", 'foo', $s);匹配某一个关键字 然后 <b>替换</b> 而且这个替换次数 是可以控制的 str_replace() 函数使用一个字符串替换字符串中的另一些字符。<?phpecho str_replace("world","John","Hello world!");?>想要控制 就需要根据需求加判断 For($i=0;$i<10;$i++){ $需要替换的内容=Strtr($需要替换的内容,Array("关键字"=>"替换后的内容")); Echo '你已经替换了',$i,'次了!'; IF($i==100){ Break; }} 上边的错了,重发For($i=0;$i<10;$i++){ $需要替换的内容=Strtr($需要替换的内容,Array("关键字"=>"替换后的内容")); Echo '你已经替换了',$i,'次了!';} 这样更简单$s = '匹配某一个关键字 然后 替换 而且这个替换次数 是可以控制的';$num = 1; //替换次数$key = '替换';echo preg_replace("/$key/", '[$0]', $s, $num);匹配某一个关键字 然后 [替换] 而且这个替换次数 是可以控制的 你是想关键字第一次出现时,把它变成锚文本或加粗吧。好像wordpress有这样的插件的。 那你试试这个 $v = array('vv','bb'); $str = "vv,cc,abcde,www.111cn.net,vv"; $str=preg_replace("/$v[0]/","<a href=".$v[1]." target=_blank >".$v[0]."</a>",$str,1); echo $str; //bb,cc,abcde,www.111cn.net,vv $str=preg_replace("/$v[0]/","<a href=".$v[1]." target=_blank >".$v[0]."</a>",$str,2); //bb,cc,abcde,www.111cn.net,bb 这篇文章是我帮你找来的,或许对你有帮助关键字替换链接功能,默认是把文章里关键字每出现一次就添加一次链接,这个在关键字出现比较频密的文章里,显得有些乱,因此希望能控制这个替换的次数。以下方法在DEDE5.1里调试通过,可以按以下方法自行修改,但要确保修改前把涉及文件先行备份。打开 include/inc_funti*****.php原代码:复制代码 function highlight($string, $words, $hrefs='',$pretext='', $step='') { //后两个变量为系统继承变量,不可指定 if($step != 'me'){ return preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$words, \$hrefs, '\\1', 'me')", $string); } if(is_array($words)){ $string = str_replace('\"', '"', $string); foreach($words as $k => $word){ if(empty($hrefs[$k])){ $string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, '', '\\1', 'me')", $string); }else{ $string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, \$hrefs[\$k], '\\1', 'me')", $string); } } return $pretext.$string; }else{ if($hrefs == ''){ $string = str_replace($words,'<strong><font color="#ff0000">'.$words.'</font></strong>',$string); }else{ if(strpos($string, $words) !== false){ $string = str_replace($words, '<a href="'.$hrefs.'" style="color:#ff0000;font-weight:bold;">'.$words.'</a>', $string); } } return $pretext.$string; } }修改后: 引用 $highlight_array=array(); $replace_times=2; //替换次数 function highlight($string, $words, $hrefs='',$pretext='', $step='') { global $highlight_array,$replace_times; //后两个变量为系统继承变量,不可指定 if($step != 'me'){ return preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$words, \$hrefs, '\\1', 'me')", $string); } if(is_array($words)){ $string = str_replace('\"', '"', $string); foreach($words as $k => $word){ if(empty($hrefs[$k])){ $string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, '', '\\1', 'me')", $string); }else{ $string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, \$hrefs[\$k], '\\1', 'me')", $string); //} } } return $pretext.$string; }else{ if($hrefs == ''){ $string = str_replace($words,'<strong><font color="#ff0000">'.$words.'</font></strong>',$string); }else{ $keyword_pos=strpos($string, $words); if( ($keyword_pos!== false)){ if ((empty($highlight_array[$words]))||(!isset($highlight_array[$words]))) { $highlight_array[$words]=1; } if ($highlight_array[$words]<=$replace_times){ $highlight_array[$words]++; $string = str_replace($words, '<a href="'.$hrefs.'" style="color:#ff0000;font-weight:bold;">'.$words.'</a>', $string); } } } return $pretext.$string; } }附加说明,关键字链接替换功能需要设置三个地方:1、 在后台的“系统管理”的“过滤设置 ”里,设置“关键字替换(是/否)”为“是”;2 、在后台的“内容维护”的“搜索关键词管理”里,点“文档关键字维护”,然后添加或修改关键字和链接地址的对应关系3、 添加和修改文章时,在“其它参数”里,填写“关键字”项,多个关键字之间用空格分隔;这些都设置完毕之后,文章在生成的时候,如果就会把把它正文里的设置的带有链接地址的关键字,自动添加上链接地址。 我以前写过的一个替换函数,替换字符串可以使用通配符(*)模糊替换相似字符串,并可以限制替换的数量函数$max 0--不限制,非0限制最大数量,从字符串按先后位置替换<?php//一个通配符替换的字符串的函数//使用说明:tihuan_str($fustr,$str1,$str2,$max)函数使用方法:$fustr---要处理的字符串,$str1---可以使用(*)通配符的要替换的字符串 , $str2-----替换为的新字符串,最后返回处理结果$fustr;$max------是最大次数,默认0为不限制,非零数限制替换最大个数function tihuan_str($fustr,$str1,$str2,$max=0){if(empty($fustr)||empty($str1)){echo '参数12不得空字符<br>';return $fustr; }$wz1=0;$arr=explode('(*)',$str1);$arr1=array();$k=0;//过滤空字符for($i=0;$i<count($arr);$i++){if($arr[$i]!==''){$arr1[$k]=$arr[$i];$k++;}}$cishu=0;while($wz1<strlen($fustr)&&($cishu<$max||$max==0)){//单个替换的过程$jishu=0;for($i=0;$i<count($arr1);$i++){if(($wz=strpos($fustr,$arr1[$i],$wz1))!==false){ if($i==0)$ks=$wz; if($i==count($arr1)-1)$js=$wz+strlen($arr1[$i]);$wz1=$wz+strlen($arr1[$i]);$jishu++;}else break;}//当符合条件时if($jishu==count($arr1)){$cishu++;//echo '第'.$cishu.'次替换:<br>';//echo 'begin:'.($ks+1).' end:'.$js.'<br>';$leftstr=substr($fustr,0,$ks);$rightstr=substr($fustr,$js);if(!$rightstr)$rightstr='';$fustr=$leftstr.$str2.$rightstr;$wz1=$ks+strlen($str2);//echo 'next:'.($wz1+1).'<br>';//echo $fustr.'<br>';}else{//echo '停止<br>';break;}//echo '<br><br>';}return $fustr;}//一个测试$fustr="sdfs<table 大股东大股东dgdg>dfs大股东</table>df<table dhfht>asdasd单个</table>";;$str1='<table(*)>(*)</table>';$str2='(我被替换啦)';$str=tihuan_str($fustr,$str1,$str2,0);echo '不设置限制替换效果:'.$str.'<br><br>';$str=tihuan_str($fustr,$str1,$str2,1);echo '设置最大数量1替换效果:'.$str;?> 怎么根据6,2,9,13,19这个值,把CHECKBOX打勾? 我的提交表单页面输出不了变量,是哪里出了问题? 请问博客日志归档的SQL语句怎么写? php中能用javacript吗 请教有关php+xml读取属性问题!!!!!!! PHP函数中包含普通html代码问题 请php高手帮个忙,怎么远程调用参数? php如何循环读出多个id的内容 哪位大哥有空来帮个忙!?谢谢。 php CURL mktime函数处理越界时的问题 php字符串分割高分求助!
global $num;
if($num--) return "<b>$r[0]</b>";
return $r[0];
}
$num = 1;
$key = '替换';
echo preg_replace_callback("/$key/", 'foo', $s);匹配某一个关键字 然后 <b>替换</b> 而且这个替换次数 是可以控制的
echo str_replace("world","John","Hello world!");
?>
想要控制 就需要根据需求加判断
$需要替换的内容=Strtr($需要替换的内容,Array("关键字"=>"替换后的内容"));
Echo '你已经替换了',$i,'次了!';
IF($i==100){
Break;
}
}
For($i=0;$i<10;$i++){
$需要替换的内容=Strtr($需要替换的内容,Array("关键字"=>"替换后的内容"));
Echo '你已经替换了',$i,'次了!';
}
$s = '匹配某一个关键字 然后 替换 而且这个替换次数 是可以控制的';$num = 1; //替换次数
$key = '替换';
echo preg_replace("/$key/", '[$0]', $s, $num);
匹配某一个关键字 然后 [替换] 而且这个替换次数 是可以控制的
$v = array('vv','bb');
$str = "vv,cc,abcde,www.111cn.net,vv";
$str=preg_replace("/$v[0]/","<a href=".$v[1]." target=_blank >".$v[0]."</a>",$str,1);
echo $str;
//bb,cc,abcde,www.111cn.net,vv $str=preg_replace("/$v[0]/","<a href=".$v[1]." target=_blank >".$v[0]."</a>",$str,2);
//bb,cc,abcde,www.111cn.net,bb
以下方法在DEDE5.1里调试通过,可以按以下方法自行修改,但要确保修改前把涉及文件先行备份。
打开 include/inc_funti*****.php
原代码:
复制代码
function highlight($string, $words, $hrefs='',$pretext='', $step='')
{
//后两个变量为系统继承变量,不可指定
if($step != 'me'){
return preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$words, \$hrefs, '\\1', 'me')", $string);
}
if(is_array($words)){
$string = str_replace('\"', '"', $string);
foreach($words as $k => $word){
if(empty($hrefs[$k])){
$string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, '', '\\1', 'me')", $string);
}else{
$string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, \$hrefs[\$k], '\\1', 'me')", $string);
}
}
return $pretext.$string;
}else{
if($hrefs == ''){
$string = str_replace($words,'<strong><font color="#ff0000">'.$words.'</font></strong>',$string);
}else{
if(strpos($string, $words) !== false){
$string = str_replace($words, '<a href="'.$hrefs.'" style="color:#ff0000;font-weight:bold;">'.$words.'</a>', $string);
}
}
return $pretext.$string;
}
}
修改后: 引用 $highlight_array=array();
$replace_times=2; //替换次数
function highlight($string, $words, $hrefs='',$pretext='', $step='')
{
global $highlight_array,$replace_times;
//后两个变量为系统继承变量,不可指定
if($step != 'me'){
return preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$words, \$hrefs, '\\1', 'me')", $string);
}
if(is_array($words)){
$string = str_replace('\"', '"', $string);
foreach($words as $k => $word){
if(empty($hrefs[$k])){
$string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, '', '\\1', 'me')", $string);
}else{
$string = preg_replace('/(^|>)([^<]+)(?=<|$)/sUe', "highlight('\\2',\$word, \$hrefs[\$k], '\\1', 'me')", $string);
//}
}
}
return $pretext.$string;
}else{
if($hrefs == ''){
$string = str_replace($words,'<strong><font color="#ff0000">'.$words.'</font></strong>',$string);
}else{
$keyword_pos=strpos($string, $words);
if( ($keyword_pos!== false)){
if ((empty($highlight_array[$words]))||(!isset($highlight_array[$words]))) {
$highlight_array[$words]=1;
}
if ($highlight_array[$words]<=$replace_times){
$highlight_array[$words]++;
$string = str_replace($words, '<a href="'.$hrefs.'" style="color:#ff0000;font-weight:bold;">'.$words.'</a>', $string);
}
}
}
return $pretext.$string;
}
}
附加说明,关键字链接替换功能需要设置三个地方:
1、 在后台的“系统管理”的“过滤设置 ”里,设置“关键字替换(是/否)”为“是”;
2 、在后台的“内容维护”的“搜索关键词管理”里,点“文档关键字维护”,然后添加或修改关键字和链接地址的对应关系
3、 添加和修改文章时,在“其它参数”里,填写“关键字”项,多个关键字之间用空格分隔;
这些都设置完毕之后,文章在生成的时候,如果就会把把它正文里的设置的带有链接地址的关键字,自动添加上链接地址。
<?php
//一个通配符替换的字符串的函数
//使用说明:tihuan_str($fustr,$str1,$str2,$max)函数使用方法:$fustr---要处理的字符串,$str1---可以使用(*)通配符的要替换的字符串 , $str2-----替换为的新字符串,最后返回处理结果$fustr;$max------是最大次数,默认0为不限制,非零数限制替换最大个数function tihuan_str($fustr,$str1,$str2,$max=0)
{if(empty($fustr)||empty($str1)){echo '参数12不得空字符<br>';return $fustr; }
$wz1=0;
$arr=explode('(*)',$str1);
$arr1=array();
$k=0;
//过滤空字符
for($i=0;$i<count($arr);$i++)
{if($arr[$i]!==''){$arr1[$k]=$arr[$i];$k++;}
}
$cishu=0;
while($wz1<strlen($fustr)&&($cishu<$max||$max==0))
{//单个替换的过程$jishu=0;
for($i=0;$i<count($arr1);$i++)
{
if(($wz=strpos($fustr,$arr1[$i],$wz1))!==false)
{ if($i==0)$ks=$wz;
if($i==count($arr1)-1)$js=$wz+strlen($arr1[$i]);
$wz1=$wz+strlen($arr1[$i]);
$jishu++;
}
else break;
}
//当符合条件时
if($jishu==count($arr1)){$cishu++;
//echo '第'.$cishu.'次替换:<br>';
//echo 'begin:'.($ks+1).' end:'.$js.'<br>';
$leftstr=substr($fustr,0,$ks);
$rightstr=substr($fustr,$js);
if(!$rightstr)$rightstr='';
$fustr=$leftstr.$str2.$rightstr;
$wz1=$ks+strlen($str2);
//echo 'next:'.($wz1+1).'<br>';
//echo $fustr.'<br>';
}else{//echo '停止<br>';
break;}
//echo '<br><br>';
}
return $fustr;
}//一个测试
$fustr="sdfs<table 大股东大股东dgdg>dfs大股东</table>df<table dhfht>asdasd单个</table>";;
$str1='<table(*)>(*)</table>';
$str2='(我被替换啦)';$str=tihuan_str($fustr,$str1,$str2,0);
echo '不设置限制替换效果:'.$str.'<br><br>';$str=tihuan_str($fustr,$str1,$str2,1);
echo '设置最大数量1替换效果:'.$str;?>