「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 正規表現を使用して文字列プレースホルダー置換を最適化するにはどうすればよいですか?

正規表現を使用して文字列プレースホルダー置換を最適化するにはどうすればよいですか?

2024 年 12 月 14 日に公開
ブラウズ:788

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

RegEx による文字列プレースホルダー置換の最適化

関数 dynStr() は、指定された文字列内のプレースホルダー変数を検索して置換することを目的としています。中括弧。

dynStr() の重要な問題の 1 つは、$matches の二重配列構造にあります。目的のデータにアクセスするために 2 つの foreach ループを使用するのは非効率的です。正規表現を単純化して、さらなる処理を必要とせずにプレースホルダー変数を直接抽出することを検討してください:

preg_match_all('/{\w }/', $str, $matches);

次に、プレースホルダー変数を置き換えるループを最適化できます。現在のアプローチでは、いくつかの文字列操作操作と配列検索を使用するため、必要以上に複雑になります:

foreach($match_group as $match) {
    // ...
    $str = ...
}

よりシンプルで簡潔な代替方法は、単一の関数呼び出しを使用し、プレースホルダーを直接置き換えることです。

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

strtr() 関数は、プレースホルダー変数と $vars 配列内の対応する値の間のマッピングを定義することで、複数の置換を効率的に実行します。

さらに、この関数は大文字と小文字を区別しないようにすることもできます。プレースホルダー変数と配列キーの両方を小文字に変換することで、追加の処理の必要性を排除します:

$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);

これらの最適化を組み込むと、より効率的で合理化された dynStr() 関数が生成されます:

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;
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3