我想只替换字符串中的第一个匹配元素,而不是替换字符串中的每个匹配元素
$str = 'abc abc abc';
$find = 'abc';
$replace = 'def';
echo mb_ereg_replace( $find, $replace, $str );
这将返回“def def def”。
我需要在$ find或$ replace参数中更改什么才能让它返回“def abc abc”?
答案 0 :(得分:1)
您可以为“abc”执行mb_strpos(),然后执行mb_substr()
例如
$str = 'blah abc abc blah abc';
$find = 'abc';
$replace = 'def';
$m = mb_strpos($str,$find);
$newstring = mb_substr($str,$m,3) . "$replace" . mb_substr($str,$m+3);
答案 1 :(得分:1)
不是很优雅,但你可以试试
$find = 'abc(.*)';
$replace = 'def\\1';
请注意,如果您的$find
包含更多捕获组,则需要调整$replace
。此外,这将取代每一行中的第一个abc。如果您的输入包含多行,请使用[\d\D]
代替.
。
答案 2 :(得分:0)
除非您需要花哨的正则表达式替换,否则最好使用普通的str_replace
,它将$count
作为第四个参数:
$str = str_replace($find, $replace, $str, $count);