На этом шаге рассмотрим методы типа *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 свидетельствует об отсутствии совпадений.
Метод | Описание/результат |
---|---|
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.