我正在使用preg_replace($oldWords, $newWords, $string);
来替换单词数组。
我希望将所有以foo
开头的字词替换为hello
,将所有以bar
开头的字词替换为world
即foo123
应更改为hello
,foobar
应更改为hello
,barx5
应更改为world
等。
如果我的数组被定义为:
$oldWords = array('/foo/', '/bar/');
$newWords = array('hello', 'world');
然后foo123
更改为hello123
而非hello
。同样barx5
更改为worldx5
而非world
如何替换完整匹配的单词?
感谢。
答案 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然后替换的内容;比赛。