PHP Это чрезмерное упрощение проблемы, чтобы добраться до сути.
Я пытаюсь использовать preg_replace() для строки $, которая содержит имя. Я хочу заменить O на E только в имени, если оно есть. Поэтому я хочу перестать искать, когда столкнусь с первым пробелом. В полном имени может быть несколько пробелов, но я смотрю только на первую часть имени.
$string = preg_replace('/O/', 'E', $string);
Как добавить код, чтобы он останавливался на первом пробеле?
Возможно, есть способ сделать это за один preg_replace() с помощью просмотра назад, но так будет понятнее.
Да, я пытался сделать это только с preg_replace. Я обычно делаю это в Perl, говоря ему искать до тех пор, пока вы не нажмете пробел [^/s].
PHP использует PCRE, поэтому вы сможете сделать это так же.
Просто измените $string =~ s/xxx/yyy/ на $string = preg_replace('/xxx/', 'yyy', $string); и замените xxx и yyy тем, что вы делаете в Perl.






Из руководства php.net для preg_replace:
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
limit The maximum possible replacements for each pattern in each subject string. Defaults to -1 (no limit).
Итак, для вашего кода это будет выглядеть примерно так:
$string = preg_replace('/O/', 'E', $string, 1);
См. документацию для получения дополнительной информации - руководство по PHP
Если в имени нет буквы O, но есть одна в фамилии, это не будет делать то, что требует плакат.
В имени может быть более одной буквы «О», поэтому количество замен в имени не ограничено.
Почему вы приняли этот ответ, если он явно неверен?
Это сработало для меня.
$string = preg_replace('/O[^\s]/', 'E', $string);
Разделите строку с помощью
explode(), выполните замену первого элемента, затем соедините его вместе с помощьюimplode().