首页 >后端开发 >php教程 >如何安全地将 `preg_replace` 中 PHP 已弃用的 `/e` 修饰符替换为 `preg_replace_callback`?

如何安全地将 `preg_replace` 中 PHP 已弃用的 `/e` 修饰符替换为 `preg_replace_callback`?

DDD
DDD原创
2024-12-27 12:35:11626浏览

How Can I Safely Replace PHP's Deprecated `/e` Modifier in `preg_replace` with `preg_replace_callback`?

使用 preg_replace_callback 转义修饰符

挑战:

PHP 中不推荐使用正则表达式修饰符,例如 /e 。当尝试用替代的 preg_replace_callback 替换以下代码中的 /e 修饰符时,这提出了一个挑战:

public static function camelize($word) {
   return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word);
}

理解反向引用:

/e修饰符用数字 (1) 替换反斜杠来表示匹配字符串的捕获部分。例如,在给定表达式 (^|_)([a-z]) 中,第一个捕获是 (^|_),第二个捕获是 ([a-z])。

preg_replace_callback 替代方案:

preg_replace_callback 采用一个回调函数,该函数接收捕获的子模式数组作为参数。第一个子模式位于索引 0,第二个子模式位于索引 1,依此类推。

应用到代码:

要替换 /e 修饰符,我们需要将替换字符串转换为匿名函数:

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

此函数采用匹配数组 $m 并返回第二个捕获的子模式转换为大写。

组合所有:

最终代码变为:

public static function camelize($word) {
   return preg_replace_callback('/(^|_)([a-z])/', function($m) { return strtoupper($m[2]); }, $word);
}

其他注意事项:

  • 从常规中删除 /e 修饰符表达式模式。
  • 考虑使用命名捕获组 ((?Ppattern)) 以获得更易读的回调参数。
  • 注意变量范围并使用 use 关键字访问外部回调中的变量。

以上是如何安全地将 `preg_replace` 中 PHP 已弃用的 `/e` 修饰符替换为 `preg_replace_callback`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn