首頁 > 後端開發 > php教程 > 如何安全地將 `preg_replace` 中 PHP 已棄用的 `/e` 修飾符替換為 `preg_replace_callback`?

如何安全地將 `preg_replace` 中 PHP 已棄用的 `/e` 修飾符替換為 `preg_replace_callback`?

DDD
發布: 2024-12-27 12:35:11
原創
631 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板