ホームページ  >  記事  >  バックエンド開発  >  正規表現を使用して文字列プレースホルダー置換を最適化するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-21 10:19:10830ブラウズ

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 内の対応する値の間のマッピングを定義することで、複数の置換を効率的に実行します。 array.

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

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

以上が正規表現を使用して文字列プレースホルダー置換を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。