2012-07-13 77 views
0

我使用preg_replace($oldWords, $newWords, $string);来替换单词数组。preg用PHP中的部分模式替换完整的单词

我希望替换开始foo所有单词为hello,所有的话开始barworld

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

如果我的数组被定义为:

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

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

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

谢谢。

回答

0

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

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

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

应改为:

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

在PHP中的反斜杠转义字符之后,这意味着你的丝线越来越变成非字符串,并且它搞乱了休息的代码。

至于你的实际问题,但是,就可以实现这个预期的效果:

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

\w匹配任何文字字符,而*是一个量词要么意味着0或任意数量的比赛。

在这两个项目中添加将导致正则表达式匹配任何字符串与foo和x个字符字符直接后面,这是preg_replace然后替换;比赛。

0

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

foreach($oldWords as $word) { 

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

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

    };