0

我正在试验一个问题 | (或)和 php.ini 中的正则表达式。

这是我想做的,例如我有这 3 句话:

“苹果很好吃”

“一天一苹果,医生远离我”

“我喜欢吃苹果”

假设我想用橙色来改变苹果这个词,所以这是我的代码:

$oldWord="apple";
$newWord="orange";
$text = preg_replace('#^' . $oldWord . ' #', $newWord, $text);
$text = preg_replace('# ' . $oldWord . ' #', $newWord, $text);
$text = preg_replace('# ' . $oldWord . '$#', $newWord, $text);

当然可以,但我还没有找到正确的组合,只用一行代码和关键字 | (或者)。

请问各位有什么建议吗?谢谢

4

5 回答 5

1

因此,如果您只想替换整个单词,即不理会“菠萝”,那么该str_replace方法将行不通。您应该使用的是单词边界锚\b

preg_replace('#\b' + $oldWord + '\b#', $newWord, $text)
于 2012-11-19T17:45:16.970 回答
1

为什么不只是str_replace('apple', 'orange', $text);

编辑:

根据用户的评论:

preg_replace('/\bapple\b/', 'orange', $text);

如果您担心正确转义表达式中的搜索词:

$oldWord = preg_quote($oldWord, '/');
$text = preg_replace("/\b$oldWord\b/", $newWord, $text);
于 2012-11-19T17:41:56.330 回答
0

请注意,您的正则表达式会删除apple. 如果这不是您想要的,而是您只想替换apple完整的单词,那么,正如其他一些人建议的那样,使用单词边界:

$text = preg_replace('#\b' . $oldWord . '\b#', $newWord, $text);

如果您确实打算删除空格,您也可能需要一个 wordboundary,但使空格是可选的:

$text = preg_replace('#[ ]?\b' . $oldWord . '\b[ ]?#', $newWord, $text);

如果它们在那里,它们也将被删除。如果不是,则正则表达式不在乎。请注意,这[ ]完全等同于只输入一个空格,但我发现它在正则表达式中更具可读性。

于 2012-11-19T17:43:13.253 回答
0

简单地使用preg_replace而不是preg_match

preg_replace('⁓\b'.$oldWord.'\b⁓', $newWord, $text)
于 2012-11-19T17:43:14.247 回答
0

我不能测试但是

$text = preg_match('#\b' . $oldWord . '\b#ig', $newWord, $text);

应该拯救你的一天;)

于 2012-11-19T17:44:57.033 回答