"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo optimizar la sustitución de marcadores de posición de cadenas mediante expresiones regulares?

¿Cómo puedo optimizar la sustitución de marcadores de posición de cadenas mediante expresiones regulares?

Publicado el 2024-12-14
Navegar:782

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

Optimización de la sustitución de marcadores de posición de cadenas con RegEx

La función dynStr() tiene como objetivo buscar y reemplazar variables de marcador de posición en una cadena determinada, indicada por llaves. Si bien funciona correctamente, su eficiencia y simplicidad se pueden mejorar.

Un problema clave con dynStr() reside en su estructura de doble matriz para $matches. Usar dos bucles foreach para acceder a los datos deseados es ineficiente. Considere simplificar la expresión regular para extraer directamente la variable de marcador de posición sin necesidad de procesamiento adicional:

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

Siguiente, el bucle para reemplazar las variables de marcador de posición se puede optimizar. El enfoque actual utiliza varias operaciones de manipulación de cadenas y búsquedas de matrices, lo que lo hace innecesariamente complejo:

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

Una alternativa más simple y concisa es usar una única llamada a función, sustituyendo el marcador de posición directamente:

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

La función strtr() realiza eficientemente múltiples reemplazos definiendo una asignación entre las variables de marcador de posición y sus valores correspondientes en la matriz $vars.

Además, la función se puede hacer que no distinga entre mayúsculas y minúsculas. al convertir tanto las variables de marcador de posición como las claves de la matriz a minúsculas, eliminando la necesidad de procesamiento adicional:

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

La incorporación de estas optimizaciones da como resultado una función dynStr() más eficiente y optimizada:

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;
}
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3