Skip to content

Оптимизация regex

Из этой темы ты узнаешь:

  • Что такое regex.

  • Как правильно писать regex на Go.

  • Как правильно писать бенчмарки к regex в Go.

Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текста в строке, файле, нескольких файлах и т. д. Их используют разработчики в коде приложения, тестировщики в автотестах, а также при работе в командной строке.

Пишем regex

Рассмотрим частые ошибки программистов при написании regex в Golang.

Допустим, у нас есть некоторый текст, который нужно очистить и отформатировать в нем слова согласно правилам.

Имеем следующие правила.

  • replacements — используется слайс паттернов regexp для соблюдения порядка очистки строки.

  • replacementsMap — используется для получения текста по паттерну regexp, на который нужно произвести замену. Пустые кавычки в значении мап говорят, что произойдет замена на пустой текст.

  • replaceWords — словарь замены слов для их форматирования по заданному стандарту.

В большинстве случаев частой ошибкой программистов в Go даже в больших компаниях, где этого обычно не ожидаешь, является компиляция регулярных выражений во время проверки регулярок на каждый вызов функции. Очень часто встречается в сравнении эффективности языков, когда пишут бенчмарки на проверку регулярных выражений и допускают эту ошибку. Попробуем написать неэффективную функцию SanitizeText(text string) string, которая очищает спецсимволы по порядку в первом этапе и заменяет слова по словарю во втором.

Видим следующую функцию.

Потенциальной проблемой здесь является компиляция regex в цикле.

Проверим нашу функцию.

Как видим, функция работает, очищает текст от ненужных спецсимволов и заменяет слова по словарю.