栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将preg_replace()e修饰符替换为preg_replace_callback

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将preg_replace()e修饰符替换为preg_replace_callback

在正则表达式中,您可以使用

(brackets)
;
来“捕获”匹配字符串的部分。在这种情况下,您正在捕获匹配的
(^|_)
([a-z])
部分。这些从1开始编号,因此您具有后向引用1和2。匹配项0是整个匹配的字符串。

/e
调节器将替换字符串,以及替代反斜线后面的数字(例如
1
)用适当的反向参考-
而是因为你是一个字符串中,你需要转义反斜线,让您得到
'\1'
。然后(有效地)运行
eval
运行结果字符串,就好像它是PHP代码一样(这就是为什么不赞成使用它的原因,因为它很容易以
eval
不安全的方式使用)。

preg_replace_callback
函数将采用回调函数,并将包含匹配的反向引用的数组传递给该函数。因此,您将在编写该代码的地方
'\1'
访问该参数的元素1-例如,如果您具有形式的匿名函数
function($matches){ ... }
,则第一个向后引用
$matches[1]
在该函数内部。

所以

/e
关于

'do_stuff(\1) . "and" . do_stuff(\2)'

可能成为

function($m) { return do_stuff($m[1]) . "and" . do_stuff($m[2]); }

还是你的情况

'strtoupper("\2")'

可能成为

function($m) { return strtoupper($m[2]); }

请注意,

$m
$matches
没有神奇的名字,他们只是说出我的回调函数,当我把参数名称。此外,您不必通过一个匿名函数,它可能是一个函数的字符串名,或者形式的东西
array($object,$method)
,因为在PHP中的任何回调,如

function stuffy_callback($things) {    return do_stuff($things[1]) . "and" . do_stuff($things[2]);}$foo = preg_replace_callback('/([a-z]+) and ([a-z]+)/', 'stuffy_callback', 'fish and chips');

与任何函数一样,默认情况下,您无法在回调之外(从周围的范围)访问变量。使用匿名函数时,可以使用

use
关键字导入需要访问的变量,如PHP手册中所述。例如,如果旧的论点是

'do_stuff(\1, $foo)'

那么新的回调可能看起来像

function($m) use ($foo) { return do_stuff($m[1], $foo); }

陷阱

  • 使用
    preg_replace_callback
    is 代替
    /e
    正则表达式上的修饰符,因此您需要从“ pattern”参数中删除该标志。这样的模式
    /blah(.*)blah/mei
    就会变成
    /blah(.*)blah/mi
  • 所述
    /e
    改性剂中使用的变体
    addslashes()
    上的内部参数,所以一些替代用于
    stripslashes()
    将其取出; 在大多数情况下,您可能希望
    stripslashes
    从新的回调中删除对的调用。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号