我需要一个替换字符串一次,并且相信preg_match可能是我最好的选择。
我正在使用它,但由于使用的动态性,有时这个功能表现得很奇怪:
function str_replace_once($remove , $replace , $string)
{
$pos = strpos($string, $remove);
if ($pos === false)
{
// Nothing found
return $string;
}
return substr_replace($string, $replace, $pos, strlen($remove));
}
现在我采用这种方法,但已经遇到下面列出的错误....我正在使用此函数解析所有类型的html字符串,因此很难给出导致错误的值。截至目前,我对以下80%的使用都显示了此错误。
function str_replace_once($remove , $replace , $string)
{
$remove = str_replace('/','\/',$remove);
$return = preg_replace("/$remove/", $replace, $string, 1);
return $return;
}
错误:
警告:preg_replace()[function.preg-replace]:编译失败:在偏移0处不重复
任何人都可以改进解决方案吗?
答案 0 :(得分:6)
您正在寻找preg_quote
而不是试图逃避\
自己(不考虑[
,+
和其他许多人:
$return = preg_replace('/'.preg_quote($remove,'/').'/', $replace, $string, 1);
答案 1 :(得分:0)
您也可以使用T-Regx library:
pattern('[a-z]+')->replace($string)->first()->with($replace);
而且您也不应该使用preg_quote()
,因为它不安全-请尝试Prepared Patterns。