PHP 有没有办法按条件替换[]里的文字?
发布网友
发布时间:2022-04-06 03:18
我来回答
共4个回答
热心网友
时间:2022-04-06 04:48
<?php
preg_match_all("!\[(.*)\]!uisU",$wenzi,$matches);//匹配得到的字符放在$matches中
//preg_match_all("![(^\]*)!uisU",$wenzi,$matches);
/*刚刚为你测试了下,这个正则写错了,把它注释掉。所有代码已经测试成功。可直接复制。*/
$matches = $matches[1];//匹配得到的字符放在$matches数组中
//It is a array like array([0]=>'实物拍摄',[1]=>'质量保障,#666666')
foreach ($matches as $match)
{
$match = explode(",",$match);//将字符按照“,”重新合成为新数组
//如果有“,”=>$match[0] = "质量保障";$match[1] = "#666666";
//如果没有“,”=>$match[0] = "质量保障";$match[1]为空;
$color = empty($match[1]) ? "#ff0000" : $match[1];
echo '<em color="'.$color.'">'.$match[0].'</em>';
}
?>
//以上代码未经测试,如有错误自行处理 (已经无错)追问“[]”括号外面的文字怎么办?你这样只是遍历输出了括号里的文字呀
追答自己解决。非常抱歉,我的能力只能到这里了。
更多的要求需要改写正则表达式,目前不是很擅长。
热心网友
时间:2022-04-06 06:06
<?php
$wenzi="本店商品全部[实物拍摄],产品[质量保障,#666666]";
echo '原:<p>'.$wenzi.'</p>';
preg_match_all('/(\[[^\]]*\])/',$wenzi,$matches);
foreach( $matches[1] as $key => $value ) {
if ( ($pos=strpos($value,'#'))===false) {
$wenzi = str_replace($value,'<em><font color="#ff0000">'.substr($value,1,strlen($value)-2).'</font></em>',$wenzi);
}else {
$wenzi = str_replace($value,'<em><font color="'.substr($value,$pos+1).'">'.substr($value,1,$pos-2).'</font></em>',$wenzi);
}
}
echo '现:<p>'.$wenzi.'</p>';
//var_mp($matches); //不妨看看这句,去掉注释就可以了。
//End_php
热心网友
时间:2022-04-06 07:40
亲 你好好看看
正则表达式那块呗~
挺简单的
热心网友
时间:2022-04-06 09:32
PHP 正则表达式结合 preg_replace 函数。追问怎么写?亲,帮帮忙。我把分都给你