Шаг 38.
Язык программирования Go.
Методы типа *regexp.Regexp

    На этом шаге рассмотрим методы типа *regexp.Regexp.

    Методы regexp.Regexp.ReplaceAll() и regexp.Regexp.ReplaceAllString(), поддерживают нумерованные и именованные ссылки. Нумерованные ссылки начинаются с $1, соответствующей первой сохраняющей паре круглых скобок. Именованные ссылки ссылаются на имена сохраняющих групп. Несмотря на то что ссылки могут указываться непосредственно по их номерам или именам (например, $2, $filename), надежней будет заключать их в фигурные скобки (на- пример, ${2}, ${filename}). Для включения литерала $ в имя ссылки следует использовать пару символов $$.

    В таблице 1 приведены некоторые методы типа *regexp.Regexp. Переменная rx имеет тип *regexp.Regexp; s – строка, сопоставляемая с шаблоном; b – срез типа []byte, сопоставляемый с шаблоном; r – значение, реализующее интерфейс io.RuneReader, сопоставляемое с шаблоном; n – максимальное число совпадений (–1 означает максимально возможное число совпадений). Возвращаемое значение nil свидетельствует об отсутствии совпадений.

Таблица 1. Методы типа *regexp.Regexp
Метод Описание/результат
rx.Expand(...) Выполняет подстановку значений по ссылкам, как это делает метод ReplaceAll(); редко используется непосредственно
rx.ExpandString(...) Выполняет подстановку значений по ссылкам, как это делает метод ReplaceAllString(); редко используется непосредственно
rx.Find(b) Значение типа []byte с самым первым найденным совпадением или nil
rx.FindAll(b, n) Значение типа [][]byte со всеми неперекрывающимися совпадениями или nil
rx.FindAllIndex(b, n) Значение типа [][]int (срез массива срезов, состоящих из двух элементов), где каждый элемент определяет совпадение или имеет значение nil, например b[pos[0]:pos[1]], где pos – один из двух элементных срезов
rx.FindAllString(s, n) Значение типа []string со всеми неперекрывающимися совпадениями или nil
rx.FindAllStringIndex(s, n) Значение типа [][]int (срез массива срезов, состоящих из двух элементов), где каждый элемент определяет совпадение или имеет значение nil, например s[pos[0]:pos[1]], где pos – один из двухэлементных срезов
rx.FindAllStringSubmatch(s, n) Значение типа [][]string (срез массива срезов строк, где каждая строка соответствует значению сохраняющей группы) или nil
rx.FindAllStringSubmatchIndex(s, n) Значение типа [][]int (срез массива срезов, состоящих из двух элементов типа int, соответствующих значениям сохраняющих групп) или nil
rx.FindAllSubmatch(b, n) Значение типа [][]byte (срез массива срезов типа []byte, где каждое значение []byte соответствует значению сохраняющей группы) или nil
rx.FindAllSubmatchIndex(b, n) Значение типа [][]int (срез массива срезов, состоящих из двух элементов типа int, соответствующих значениям сохраняющих групп) или nil
rx.FindIndex(b) Двухэлементный срез типа []int, определяющий самое первое совпадение, например b[pos[0]:pos[1]], где pos – один из двухэлементных срезов, или nil
rx.FindReaderIndex(r) Двухэлементный срез типа []int, определяющий самое первое совпадение и значение сохраняющей группы, или nil
rx.FindReaderSubmatchIndex(r) Значение типа []int, определяющее самое первое совпадение и значение сохраняющей группы, или nil
rx.FindString(s) Самое первое совпадение или пустая строка
rx.FindStringIndex(s) Двухэлементный срез типа []int, определяющий самое первое совпадение, или nil
rx.FindStringSubmatch(s) Значение типа []string с самым первым совпадением и значением сохраняющей группы или nil
rx.FindStringSubmatchIndex(s) Значение типа []int, определяющее самое первое совпадение и значение сохраняющей группы, или nil
rx.FindSubmatch(b) Значение типа [][]byte с самым первым совпадением и значением сохраняющей группы или nil
rx.FindSubmatchIndex(b) Значение типа [][]byte с самым первым совпадением и значением сохраняющей группы или nil
rx.LiteralPrefix() Возможно, пустая строка префикса, с которой должно начинаться любое совпадение с регулярным выражением, и значение типа bool, указывающее, соответствует ли регулярному выражению вся строка целиком
rx.Match(b) true, если b соответствует регулярному выражению
rx.MatchReader(r) true, если содержимое значения r типа io.RuneReader соответствует регулярному выражению.
rx.MatchString(s) true, если s соответствует регулярному выражению
rx.NumSubexp() Количество групп в круглых скобках, содержащихся в регулярном выражении
rx.ReplaceAll(b,br) Значение типа []byte – копия аргумента b, где каждое совпадение замещено значениями ссылок, имена которых указаны в срезе br типа []byte
rx.ReplaceAllFunc(b, f) Значение типа []byte – копия аргумента b, где каждое совпадение замещено возвращаемым значением, полученным от функции f с сигнатурой func([]byte) []byte, которой передаются найденные совпадения
rx.ReplaceAllLiteral(b, br) Значение типа []byte – копия аргумента b, где каждое совпадение замещено значением br типа []byte
rx.ReplaceAllLiteralString(s,sr) Значение типа string – копия аргумента s, где каждое совпадение замещено значением sr
rx.ReplaceAllString(s, sr) Значение типа string – копия аргумента s, где каждое совпадение замещено значениями ссылок, имена которых указаны в строке sr
rx.ReplaceAllStringFunc(s, f) Значение типа string – копия аргумента s, где каждое совпадение замещено возвращаемым значением, полученным от функции f с сигнатурой func(string) string, которой передаются найденные совпадения
rx.String() Значение типа string, содержащее текст регулярного выражения
rx.SubexpNames() Значение типа []string (которое не должно изменяться), содержащее имена всех именованных подвыражений

    На следующем шаге рассмотрим примеры использования регулярных выражений в Go.


Предыдущий шаг Содержание Следующий шаг