«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как я могу оптимизировать замену строковых заполнителей с помощью регулярных выражений?

Как я могу оптимизировать замену строковых заполнителей с помощью регулярных выражений?

Опубликовано 14 декабря 2024 г.
Просматривать:989

How Can I Optimize String Placeholder Substitution Using Regular Expressions?

Оптимизация замены заполнителя строки с помощью RegEx

Функция dynStr() предназначена для поиска и замены переменных-заполнителей в заданной строке, обозначаемых фигурные скобки. Несмотря на то, что он работает правильно, его эффективность и простоту можно улучшить.

Одна из ключевых проблем dynStr() заключается в его структуре двойного массива для $matches. Использование двух циклов 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.

Кроме того, функцию можно сделать нечувствительной к регистру преобразуя переменные-заполнители и ключи массива в нижний регистр, устраняя необходимость в дополнительной обработке:

$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;
}
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3