Метод regexp.Regexp.SubexpNames
Метод SubexpNames возвращает срез строк,
содержащий имена всех подвыражений (capturing groups)
регулярного выражения, в порядке их объявления.
Первый элемент среза всегда является пустой строкой,
так как он соответствует всему регулярному выражению.
Если подвыражение не имеет имени, соответствующий
элемент среза будет пустой строкой.
Синтаксис
regexp.SubexpNames() []string
Пример
Давайте получим имена подвыражений для регулярного выражения с именованными группами:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)
names := re.SubexpNames()
fmt.Println(names)
}
Результат выполнения кода:
["" year month day]
Как видим, первый элемент среза пустой, а остальные содержат имена подвыражений.
Пример
Давайте получим имена подвыражений для регулярного выражения, где некоторые группы не имеют имени:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(a)(?P<second>b)(c)`)
names := re.SubexpNames()
fmt.Println(names)
}
Результат выполнения кода:
["" second ]
В данном примере первое и третье подвыражения не имеют
имени, поэтому соответствующие элементы среза пустые.
Только второе подвыражение имеет имя "second".
Пример
Давайте используем метод SubexpNames вместе
с методом FindStringSubmatch для сопоставления
имен групп с их значениями:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?P<first>[a-z]+)-(?P<second>\d+)`)
text := "abc-123"
matches := re.FindStringSubmatch(text)
names := re.SubexpNames()
for i, match := range matches {
if names[i] != "" {
fmt.Printf("%s: %s\n", names[i], match)
}
}
}
Результат выполнения кода:
"first: abc"
"second: 123"
В этом примере мы получаем срез совпадений и срез имен, затем сопоставляем их, чтобы вывести значения только для именованных групп.
Смотрите также
-
метод
regexp.Regexp.SubexpIndex,
который возвращает индекс подвыражения по его имени -
метод
regexp.Regexp.NumSubexp,
который возвращает количество подвыражений в регулярном выражении -
метод
regexp.Regexp.FindStringSubmatch,
который возвращает срез совпадений для подвыражений -
функцию
regexp.MustCompile,
которая компилирует регулярное выражение и вызывает панику в случае ошибки