挑戰:
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中文網其他相關文章!