我对于正则,不是很熟悉,正则对字符串的处理非常的广泛,什么都可以做,有时只需要它的一点功能就可以做很多的字符串处理了,路(.*?)就是通配符的基本正则表达式,对正则我不熟悉,经常需要用类似通配符的处理字符串,所以我 写了一个可以使用通配符的简单的处理字符串替换的函数tihuan_str()
正则其他的功能实现就比较难了,路可变的数量(把字符分类,路数字,这些地方不好把握)
//写一个通配符替换的字符串的函数
//使用说明:tihuan_str($fustr,$str1,$str2)函数使用方法:$fustr---要处理的字符串,$str1---可以使用(*)通配符的要替换的字符串 , $str2-----替换为的新字符串,最后返回处理结果$fustr;
$fustr="sdfs
df";;$str1='
';$str2='(我被替换啦)';
function tihuan_str($fustr,$str1,$str2)
{if(empty($fustr)||empty($str1)){echo '参数12不得空字符
';return $fustr; }
$wz1=0;
$arr=explode('(*)',$str1);
$arr1=array();
$k=0;
//过滤空字符
for($i=0;$i
{if($arr[$i]!==''){$arr1[$k]=$arr[$i];$k++;}
}
$cishu=0;
while($wz1
{//单个替换的过程
$jishu=0;
for($i=0;$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.'次替换:
';
echo 'begin:'.($ks+1).' end:'.$js.'
';
$leftstr=substr($fustr,0,$ks);
$rightstr=substr($fustr,$js);
if(!$rightstr)$rightstr='';
$fustr=$leftstr.$str2.$rightstr;
$wz1=$ks+strlen($str2);
echo 'next:'.($wz1+1).'
';
echo $fustr.'
';
}
else{echo '停止
';break;}
echo '
';
}
return $fustr;
}
$str=tihuan_str($fustr,$str1,$str2);
echo '替换效果:'.$str;
?>