Замените только первый соответствующий элемент, используя PHP mb_ereg_replace - PullRequest
0 голосов
/ 29 марта 2010

Я хочу заменить только первый соответствующий элемент в строке вместо замены каждого соответствующего элемента в строке

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

Это вернет "def def def".

Что мне нужно изменить в параметре $ find или $ replace, чтобы он возвращал def abc abc?

Ответы [ 3 ]

1 голос
/ 29 марта 2010

вы можете сделать mb_strpos () для «abc», затем сделать 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 голос
/ 29 марта 2010

Не очень элегантно, но вы можете попробовать

$find = 'abc(.*)'; 
$replace = 'def\\1'; 

Обратите внимание, что если ваш $find содержит больше групп захвата, вам нужно настроить $replace. Кроме того, это заменит первый abc в каждой строке. Если ваш ввод содержит несколько строк, используйте [\d\D] вместо ..

0 голосов
/ 29 марта 2010

Если вам не нужны необычные замены регулярных выражений, вам лучше использовать простой старый str_replace, который принимает $count в качестве четвертого параметра:

$str = str_replace($find, $replace, $str, $count);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...