preg在PHP中使用部分模式替换完整单词

preg在PHP中使用部分模式替换完整单词,php,preg-replace,Php,Preg Replace,我使用的是preg_replace($oldWords,$newWords,$string)替换一个单词数组 我希望将所有以foo开头的单词替换为hello,并将所有以bar开头的单词替换为world i、 efoo123应更改为hello,foobar应更改为hello,barx5应更改为world,等等 如果我的数组定义为: $oldWords = array('/foo/', '/bar/'); $newWords = array('hello', 'world'); 然后foo12

我使用的是preg_replace($oldWords,$newWords,$string)替换一个单词数组

我希望将所有以
foo
开头的单词替换为
hello
,并将所有以
bar
开头的单词替换为
world

i、 e
foo123
应更改为
hello
foobar
应更改为
hello
barx5
应更改为
world
,等等

如果我的数组定义为:

$oldWords = array('/foo/', '/bar/');  
$newWords = array('hello', 'world');
然后
foo123
更改为
hello123
,而不是
hello
。类似地,
barx5
更改为
worldx5
,而不是
world

如何替换完全匹配的单词


谢谢。

一种方法是在数组中循环检查每个单词,因为我们只检查前三个字母,我将使用substr()而不是regex,因为regex函数速度较慢

    foreach( $oldWords as $word ) {

        $newWord = substr( $word, 0, 2 );

        if( $newWord === 'foo'  ) {
            $word = 'hello';
        }
        else if( $newWord === 'bar' ) {
            $word = 'world';
        }

    };

如果您了解regex以及preg_replace的工作原理,那么这实际上非常简单

首先,替换阵列的格式不正确。什么是:

$oldWords = array('\foo\', '\bar\');
应改为:

$oldWords = array('/foo/', '/bar/');
因为php中的反斜杠会转义后面的字符,这意味着您的字符串会变成非字符串,并且会弄乱代码的其余部分

然而,对于您的实际问题,您可以通过以下方式达到预期效果:

$oldWords = array('/foo\w*/', '/bar\w*/');
\w
匹配任何单词字符,而
*
是一个量词,表示0或任意数量的匹配

添加这两个项将导致正则表达式直接匹配任何带有foo和x个单词字符的字符串,这就是preg_替换然后替换的内容;比赛