PHP preg_仅替换名字

PHP preg_仅替换名字,php,Php,PHP 这是对一个问题的过分简化 我试图对包含名称的$string使用preg_replace()。我只想在名字中用E替换O,如果有的话。因此,当我遇到第一个空间时,我想停止寻找。全名中可能有多个空格,但我只查看名称的第一部分 $string = preg_replace('/O/', 'E', $string); 如何添加代码来告诉它在第一个空格处停止?来自php.net手册中的preg\u replace: preg_replace ( mixed $pattern , mixed $re

PHP 这是对一个问题的过分简化

我试图对包含名称的$string使用preg_replace()。我只想在名字中用E替换O,如果有的话。因此,当我遇到第一个空间时,我想停止寻找。全名中可能有多个空格,但我只查看名称的第一部分

$string = preg_replace('/O/', 'E', $string);

如何添加代码来告诉它在第一个空格处停止?

来自php.net手册中的
preg\u replace

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
限制 每个主题字符串中每个模式的最大可能替换。默认值为-1(无限制)

因此,对于您的代码,它看起来是这样的:

$string = preg_replace('/O/', 'E', $string, 1);
这对我很有效

$string = preg_replace('/O[^\s]/', 'E', $string);

使用
explode()
拆分字符串,对第一个元素执行替换,然后将其与
implode()
放回一起。可能有一种方法可以使用lookback在单个
preg\u replace()
中执行,但这会更清晰。是的,我正试图使用preg\u replace来执行此操作。我曾经在perl中这样做,告诉它搜索直到找到一个空格[^/s]。PHP使用PCRE,所以你应该可以用同样的方法来做。只需将
$string=~s/xxx/yyy/
更改为
$string=preg\u replace('/xxx/','yyy',$string)并将
xxx
yyy
替换为您在Perl中所做的任何操作。如果名字中没有O,但姓氏中有一个,这将无法满足海报的要求。名字中可能有多个O,因此,名字的替换数量没有限制。当答案显然不正确时,你为什么接受这个答案?