正则表达式可能会令人生畏,尤其是在使用捕获组和替换时。让我们使用 '/e' 修饰符破译 preg_replace() 的替换任务:
public static function camelize($word) { return preg_replace('/(^|_)([a-z])/e', 'strtoupper("\2")', $word); }
这里,目标是将 '^' (字符串开头)或 '_' (字符串开头)后面的字母大写(下划线)。
'/e' 修饰符将替换字符串计算为 PHP 代码。 “2”指的是第二个捕获组,即“^”或“_”后面的小写字母。然而,出于安全原因,此修饰符已被弃用。
preg_replace_callback() 通过提供回调函数而不是替换字符串提供了更安全的替代方案:
return preg_replace_callback('/(^|_)([a-z])/', function($matches) { return strtoupper($matches[2]); }, $word);
匿名函数接受一个匹配数组作为参数。这里,$matches[1] 代表“^”或“_”,$matches[2] 代表要大写的字母。
注意“/e”使用 preg_replace_callback() 时需要删除修饰符。上述模式简化为:
return preg_replace_callback('/(^|_)([a-z])/', function($matches) { return strtoupper($matches[2]); }, $word);
匿名函数只能访问使用 'use' 关键字显式导入的变量。
以上是如何安全地将 PHP 已弃用的 `preg_replace()` `/e` 修饰符替换为 `preg_replace_callback()`?的详细内容。更多信息请关注PHP中文网其他相关文章!