preg在PHP中使用部分模式替换完整单词
我使用的是preg_replace($oldWords,$newWords,$string)替换一个单词数组 我希望将所有以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
foo
开头的单词替换为hello
,并将所有以bar
开头的单词替换为world
i、 efoo123
应更改为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_替换然后替换的内容;比赛