РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
449 of 1593 menu

Метод 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,
    который заменяет все совпадения на другую строку
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить