PHP的preg_replace,其中替换是匹配的任意函数

时间:2010-03-26 18:52:00

标签: php regex debugging

假设我想用“oof”替换“foo”的出现:

$s = "abc foo bar";
echo preg_replace('/(foo)/', strrev("$1"), $s);

而不是“abc oof bar”我得到“abc 1$ bar”。 换句话说,它将文字字符串“$ 1”传递给strrev()函数,而不是正则表达式匹配“foo”。

在上面的代码中解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

传递/e标志。

echo preg_replace('/(foo)/e', 'strrev("\\1")', $s);

更安全的选择是使用preg_replace_callback

function revMatch ($matches) {
  return strrev($matches[1]);
}
...

echo preg_replace_callback('/(foo)/', "revMatch", $s);