"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je optimiser la substitution d'espaces réservés à des chaînes à l'aide d'expressions régulières ?

Comment puis-je optimiser la substitution d'espaces réservés à des chaînes à l'aide d'expressions régulières ?

Publié le 2024-12-14
Parcourir:360

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

Optimisation de la substitution d'espace réservé de chaîne avec RegEx

La fonction dynStr() vise à rechercher et remplacer des variables d'espace réservé dans une chaîne donnée, notée accolades. Bien qu'il fonctionne correctement, son efficacité et sa simplicité peuvent être améliorées.

Un problème clé avec dynStr() réside dans sa structure à double tableau pour $matches. Utiliser deux boucles foreach pour accéder aux données souhaitées est inefficace. Pensez à simplifier l'expression régulière pour extraire directement la variable d'espace réservé sans avoir besoin de traitement supplémentaire :

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

Ensuite, la boucle pour remplacer les variables d'espace réservé peut être optimisée. L'approche actuelle utilise plusieurs opérations de manipulation de chaînes et de recherches de tableaux, ce qui la rend inutilement complexe :

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

Une alternative plus simple et plus concise consiste à utiliser un seul appel de fonction, en remplaçant directement l'espace réservé :

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

La fonction strtr() effectue efficacement plusieurs remplacements en définissant un mappage entre les variables d'espace réservé et leurs valeurs correspondantes dans le tableau $vars.

De plus, la fonction peut être rendue insensible à la casse en convertissant à la fois les variables d'espace réservé et les clés du tableau en minuscules, éliminant ainsi le besoin de traitement supplémentaire :

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

L'intégration de ces optimisations aboutit à une fonction dynStr() plus efficace et rationalisée :

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;
}
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3