仅使用PHP的mb_ereg_replace替换第一个匹配元素

时间:2010-03-29 09:53:56

标签: php regex

我想只替换字符串中的第一个匹配元素,而不是替换字符串中的每个匹配元素

$str = 'abc abc abc';
$find = 'abc';
$replace = 'def';
echo mb_ereg_replace( $find, $replace, $str );

这将返回“def def def”。

我需要在$ find或$ replace参数中更改什么才能让它返回“def abc abc”?

3 个答案:

答案 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);