"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso otimizar a substituição de espaço reservado de string usando expressões regulares?

Como posso otimizar a substituição de espaço reservado de string usando expressões regulares?

Publicado em 2024-12-14
Navegar:288

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

Otimizando a substituição de placeholder de string com RegEx

A função dynStr() tem como objetivo procurar e substituir variáveis ​​de placeholder em uma determinada string, denotada por colchetes. Embora funcione corretamente, sua eficiência e simplicidade podem ser melhoradas.

Um problema importante com dynStr() reside em sua estrutura de array duplo para $matches. Usar dois loops foreach para acessar os dados desejados é ineficiente. Considere simplificar a expressão regular para extrair diretamente a variável de espaço reservado sem a necessidade de processamento adicional:

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

Próximo, o loop para substituir as variáveis ​​de espaço reservado pode ser otimizado. A abordagem atual usa diversas operações de manipulação de strings e pesquisas de array, tornando-a desnecessariamente complexa:

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

Uma alternativa mais simples e concisa é usar uma única chamada de função, substituindo o espaço reservado diretamente:

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

A função strtr() executa com eficiência múltiplas substituições, definindo um mapeamento entre as variáveis ​​de espaço reservado e seus valores correspondentes no array $vars.

Além disso, a função pode se tornar insensível a maiúsculas e minúsculas convertendo as variáveis ​​de espaço reservado e as chaves do array para letras minúsculas, eliminando a necessidade de processamento 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);

A incorporação dessas otimizações resulta em uma função dynStr() mais eficiente e simplificada:

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;
}
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3