假设我想用“oof”替换“foo”的出现:
$s = "abc foo bar";
echo preg_replace('/(foo)/', strrev("$1"), $s);
而不是“abc oof bar
”我得到“abc 1$ bar
”。
换句话说,它将文字字符串“$ 1”传递给strrev()函数,而不是正则表达式匹配“foo”。
在上面的代码中解决此问题的最佳方法是什么?
答案 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);