因为写一个css合并工具,去掉注释时,发现正则表达式很难写,最后,还是用php来实现吧,但是一不小心写出来的代码居然报内存超出可用的128m!!
原因是因为我找到/*和*/之后
$str=substr($str,0,$pos_left).substr($str,$pos_right+2); //最后报错在这里!
后来改成了:
function replaceNote($str){ $pos0 = strpos($str,'/*'); while($pos0!==false){ $pos1 = strpos($str,'*/'); if($pos1===false){ $pos0+=2; }else{ $rp = substr($str,$pos0,$pos1-$pos0+2); $str = str_replace($rp,'',$str); $pos0 = strpos($str,'/*'); } } $str = str_replace(';',"; ",$str); if(strlen($str)<100) echo $str; return $str; }
速度相当快,比正则表达式快,而且效果好!!
依据我个人10来年的经验来看,正则表达式不适合太复杂的场景,比如你的新闻小偷,用正则很难实现理想的效果,还是用strpos查找特征字符,来的又快又好