Метод regexp.Regexp.Longest
Метод Regexp.Longest применяется к скомпилированному регулярному выражению
и изменяет его поведение таким образом, что при поиске совпадений
будет выбираться самое длинное из возможных совпадений.
По умолчанию регулярные выражения в Go выбирают самое левое
совпадение, а при наличии нескольких вариантов - самое короткое.
Метод Longest меняет это поведение на выбор самого длинного
совпадения среди всех возможных. Метод не принимает параметров
и не возвращает значений, он изменяет состояние самого объекта
Regexp.
Синтаксис
re.Longest()
Пример
Давайте рассмотрим базовый пример использования метода
Longest. Создадим регулярное выражение, которое
может найти несколько совпадений в строке, и сравним
поведение с методом Longest и без него:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`a+`)
text := "aaa"
// Обычное поведение - самое короткое совпадение
res := re.FindString(text)
fmt.Println(res)
// После вызова Longest - самое длинное совпадение
re.Longest()
res = re.FindString(text)
fmt.Println(res)
}
Результат выполнения кода:
"a"
"aaa"
Пример
Рассмотрим более сложный пример с альтернативами.
Регулярное выражение a|ab может совпасть как с
символом 'a', так и с подстрокой 'ab'.
Без вызова Longest будет выбрано самое левое
и короткое совпадение:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`a|ab`)
text := "ab"
// Без Longest - выбирается самое левое и короткое
res := re.FindString(text)
fmt.Println(res)
// С Longest - выбирается самое длинное
re.Longest()
res = re.FindString(text)
fmt.Println(res)
}
Результат выполнения кода:
"a"
"ab"
Пример
Метод Longest особенно полезен при работе с
повторяющимися шаблонами. Рассмотрим пример с квантификаторами:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+`)
text := "12345"
// По умолчанию FindString находит самое короткое
res := re.FindString(text)
fmt.Println(res)
// Longest заставляет найти самое длинное
re.Longest()
res = re.FindString(text)
fmt.Println(res)
}
Результат выполнения кода:
"1"
"12345"
Смотрите также
-
метод
Regexp.Find,
который находит первое совпадение с регулярным выражением -
метод
Regexp.FindAll,
который находит все совпадения с регулярным выражением -
метод
Regexp.Match,
который проверяет, соответствует ли строка регулярному выражению -
метод
Regexp.ReplaceAll,
который заменяет все совпадения на другую строку