当前位置: 首页 > 面试题库 >

用preg_replace_callback替换不推荐使用的preg_replace / e [重复]

萧光华
2023-03-14
问题内容

这个问题已经在这里有了答案

用preg_replace_callback替换preg_replace()e修饰符 (3个答案)

4年前关闭。

$result = preg_replace(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", 
    "CallFunction('\\1','\\2','\\3','\\4','\\5')",
    $result
);

上面的代码在升级到PHP 5.5后给出了弃用警告:

不推荐使用 :preg_replace():不推荐使用/ e修饰符,而应使用preg_replace_callback

如何用替换代码preg_replace_callback()


问题答案:

您可以使用匿名函数将匹配项传递给函数:

$result = preg_replace_callback(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/isU",
    function($m) { return CallFunction($m[1], $m[2], $m[3], $m[4], $m[5]); },
    $result
);

除了更快之外,这还可以正确处理字符串中的双引号。您当前使用的代码/e会将双引号"转换为\"



 类似资料:
  • 问题内容: 我很讨厌正则表达式。我正在尝试替换为: 与带有匿名函数的preg_replace_callback一起使用。我不知道\\ 2在做什么。或就此而言,preg_replace_callback的工作方式完全一样。 实现该目标的正确代码是什么? 问题答案: 在正则表达式中,您可以使用; 来“捕获”匹配字符串的部分。在这种情况下,您正在捕获匹配的和部分。这些从1开始编号,因此您具有后向引用1和

  • 本文向大家介绍PHP正则替换函数preg_replace和preg_replace_callback使用总结,包括了PHP正则替换函数preg_replace和preg_replace_callback使用总结的使用技巧和注意事项,需要的朋友参考一下 在编写PHP模板引擎工具类时,以前常用的一个正则替换函数为 preg_replace(),加上正则修饰符 /e,就能够执行强大的回调函数,实现模板引

  • 问题内容: 我发现这段代码的工作方式是,我可以以编程方式创建richfaces下拉菜单。但是不推荐使用某些代码。谁能告诉我要放什么而不是不赞成使用的电话? 谢谢 不推荐使用的代码行是: 问题答案: javadocs明确指出: 不推荐使用 。通过调用getExpressionFactory()然后 ExpressionFactory.createMethodExpression(javax.el.E

  • 问题内容: 我已经继承了代码 @已弃用,并显示为“ 没有RequestConfig的类文档,我不知道应该使用哪种方法来替换and 。 问题答案: 您正在将apache HttpClient 4.3库与apache HttpClient 4.2代码一起使用。 请注意,在您的情况下,getParams()和ConnRoutePNames不是唯一不推荐使用的方法。DefaultHttpClient类本身

  • 我的错误日志中出现了以下错误:woocommerce_product_tax_class从3.0.0版开始就不推荐使用了!改用woocommerce_product_get_tax_class。 我有以下功能来显示不同的用户角色不同的税务类。我可以直接将“woocommerce_product_tax_class”更改为“woocommerce_product_get_tax_class”吗?

  • Java9不推荐使用包含Java EE API的六个模块,它们将很快被删除: java.activation与包 java.corba带有、、和包 java.transaction,带有包 java.xml.bind与所有包一起 java.xml.ws(带有、、以及所有包) java.xml.ws.annotation与包 为了让收集KnowWeldge更容易,我用我目前所知道的来回答,并把答案做