挑战:
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); }
其他注意事项:
以上是如何安全地将 `preg_replace` 中 PHP 已弃用的 `/e` 修饰符替换为 `preg_replace_callback`?的详细内容。更多信息请关注PHP中文网其他相关文章!