На этом шаге рассмотрим функции пакета regexp для работы со строками в Go.
Рассмотрим таблицы со списками функций из пакета regexp и синтаксических конструкций регулярных выражений, поддерживаемых пакетом, а также несколько примеров.
Пакет regexp представляет собой реализацию механизма регулярных выражений RE2 Расса Кокса (Russ Cox). Это быстрый механизм, поддерживающий возможность выполнения в многопоточных программах. В механизме RE2 не выполняются возвраты (backtracking), что гарантирует линейное увеличение времени выполнения O(n), где n – длина сопоставляемой строки, тогда как в механизмах с возвратами время выполнения может возрастать по экспоненте O(n2). Высокая производительность получена в основном за счет отказа от поддержки обратных ссылок. Однако это ограничение обычно легко можно обойти за счет применения функций из пакета regexp.
В табл. 1 перечислены функции из пакета regexp, включая четыре функции, создающие значения типа *regexp.Regexp. Переменные p и s имеют тип string, где p – шаблон регулярного выражения.
Функция | Описание/результат |
---|---|
regexp.Match(p, b) | true и nil, если шаблону p соответствует b типа []byte |
regexp.MatchReader(p, r) | true и nil, если шаблону p соответствует текст, возвращаемый значением r типа io.RuneReader |
regexp.MatchString(p, s) | true и nil, если строка s соответствует шаблону p |
regexp.QuoteMeta(s) | Строка, в которой все метасимволы регулярных выражений надежно экранированы |
regexp.Compile(p) | Значение *regexp.Regexp и nil в случае успешной компиляции шаблона p |
regexp.CompilePOSIX(p) | Значение *regexp.Regexp и nil в случае успешной компиляции шаблона p |
regexp.MustCompile(p) | Значение *regexp.Regexp в случае успешной компиляции шаблона p, иначе возникает аварийная ситуация |
regexp.MustCompilePOSIX(p) | Значение *regexp.Regexp в случае успешной компиляции шаблона p, иначе возникает аварийная ситуация |
На следующем шаге рассмотрим экранированные последовательности, поддерживаемые пакетом regexp.