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

时间:2012-07-13 21:50:20

标签: php preg-replace

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

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

foo123应更改为hellofoobar应更改为hellobarx5应更改为world等。

如果我的数组被定义为:

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

然后foo123更改为hello123而非hello。同样barx5更改为worldx5而非world

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

感谢。

2 个答案:

答案 0 :(得分:0)

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

    foreach( $oldWords as $word ) {

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

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

    };

答案 1 :(得分:0)

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

首先,您的替换阵列形成不正确。是什么:

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

应改为:

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

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

但是,对于您的实际问题,您可以通过以下方式获得所需的效果:

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

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

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