Maison > développement back-end > tutoriel php > 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 ?

Linda Hamilton
Libérer: 2024-11-21 10:19:10
original
897 Les gens l'ont consulté

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 d'un traitement supplémentaire :

preg_match_all('/{\w+}/', $str, $matches);
Copier après la connexion

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 = ...
}
Copier après la connexion

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)]]);
}
Copier après la connexion

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

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);
Copier après la connexion

Intégrer ces optimisations se traduit par 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;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal