」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用正規表示式優化字串佔位符替換?

如何使用正規表示式優化字串佔位符替換?

發佈於2024-12-14
瀏覽:204

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

使用RegEx 優化字串佔位符替換

使用RegEx 優化字串佔位符替換

函數dynStr() 旨在搜尋並替換給定字串中的佔位符變量,表示為大括號。雖然它的功能正確,但它的效率和簡單性還可以提高。
preg_match_all('/{\w }/', $str, $matches);
dynStr() 的一個關鍵問題在於它的 $matches 的雙數組結構。使用兩個 foreach 迴圈來存取所需的資料效率很低。考慮簡化正規表示式,直接提取佔位符變量,無需進一步處理:

preg_match_all('/{\w }/', $str, $matches);
preg_match_all('/{\w }/', $str, $matches);
接下來,可以最佳化替換佔位符變數的循環。目前的方法使用多個字串操作操作和陣列查找,使其變得不必要的複雜:

foreach($match_group as $match) { // ... $str = ... }
preg_match_all('/{\w }/', $str, $matches);
更簡單、更簡潔的替代方法是使用單一函數調用,直接替換佔位符:

foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }

strtr() 函數透過定義佔位符變數與其在 $vars 陣列中的對應值之間的對應來有效地執行多次取代。
preg_match_all('/{\w }/', $str, $matches);
此外,該函數可以不區分大小寫通過將佔位符變量和數組鍵都轉換為小寫,消除了額外處理的需要:

$allowed = array_keys(array_change_key_case($ vars, CASE_LOWER)); …… $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
function dynStr($str,$vars) {
    preg_match_all('/{\w }/', $str, $matches);
    foreach($matches[0] as $match) {
        $vars = array_change_key_case($vars, CASE_LOWER);
        $str = strtr($str, [$match => $vars[strtolower($match)]]);
    }
    return $str;
}
合併這些優化會產生更有效率、更精簡的dynStr()函數:

How Can I Optimize String Placeholder Substitution Using Regular Expressions?
函數dynStr($str,$vars) { preg_match_all('/{\w }/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } 返回$str; }

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3