该e
修饰符已弃用。不鼓励使用它。
相反,我会将您指向preg_replace_callback() function
,它还使您能够从正则表达式替换中调用 PHP 代码,但没有e
修饰符中体现的不良做法。
您的原始示例代码试图执行以下操作:
return preg_replace('|#(\d)|e', '$args[\\1 - 1]', $str);
- 以包含哈希的字符串开头,后跟一个数字
- 获取
$args
比数字少一的数组元素的内容。
- 用元素的内容替换字符串中的数字
$args
。
正如@Jon 所说,这并不是 regex replace 可以用来做的最有用的事情,但如果你确实需要这样做,它可以很容易地完成,并且通过更好的编码实践,使用preg_replace_callback()
:
preg_replace_callback(
'|#(\d)|',
function($matches) use($args) {return $args[$matches[1]-1];},
$str
);
这里的优点是您现在在替换代码中具有更大的灵活性。
希望有帮助。(我把它放在多行以使其更容易阅读)
请注意,上面的代码假设您使用的是 PHP 5.3 或更高版本。如果您使用的是早期版本,则需要使用create_function()
而不是内联函数。
我知道我没有直接回答这个问题,但这没关系,因为@Jon 已经解决了这方面的问题。但我希望回答这将引导您获得更好的代码。