0

preg_replace($oldWords, $newWords, $string);用来替换单词数组。

我希望替换所有以foointo开头的hello单词,以及所有以barinto开头的单词world

foo123应该改成hellofoobar应该改成hellobarx5应该改成world,等等。

如果我的数组定义为:

$oldWords = array('/foo/', '/bar/');  
$newWords = array('hello', 'world');

然后foo123更改为hello123而不是hello。类似地barx5改变worldx5而不是world

如何替换完整匹配的单词?

谢谢。

4

2 回答 2

0

一种方法是遍历数组检查每个单词,因为我们只检查前三个字母,所以我会使用 substr() 而不是正则表达式,因为正则表达式函数较慢。

    foreach( $oldWords as $word ) {

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

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

    };
于 2012-07-13T22:07:36.797 回答
0

如果您了解正则表达式以及 preg_replace 的工作原理,这实际上非常简单。

首先,您的替换数组的格式不正确。什么是:

$oldWords = array('\foo\', '\bar\');

应该是:

$oldWords = array('/foo/', '/bar/');

由于 php 中的反斜杠转义了它后面的字符,这意味着您的字符串正在变成非字符串,并且它弄乱了您的其余代码。

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

$oldWords = array('/foo\w*/', '/bar\w*/');

\w匹配任何单词字符,while*是一个量词,表示 0 或任意数量的匹配。

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

于 2012-07-13T22:07:47.657 回答