Функция regexp.MustCompilePOSIX

Функция regexp.MustCompilePOSIX компилирует регулярное выражение в соответствии с синтаксисом POSIX. Если компиляция завершается ошибкой, функция вызывает панику, что делает ее удобной для использования на этапе инициализации, когда регулярное выражение заведомо корректно. В первый параметр мы передаем строку с регулярным выражением в синтаксисе POSIX, а возвращает функция указатель на структуру Regexp. В отличие от regexp.MustCompile, эта функция использует более строгий POSIX-алгоритм, который ищет самый длинный возможный вариант совпадения.

Синтаксис

goregexp.MustCompilePOSIX(str)

Пример

Давайте скомпилируем POSIX-совместимое регулярное выражение для поиска последовательности цифр и проверим его работу:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  re := regexp.MustCompilePOSIX(`[0-9]+`)
  res := re.FindString("abc123def456")
  fmt.Println(res)
}

Результат выполнения кода:

go"123"

Пример

Давайте сравним работу POSIX-компиляции с обычной компиляцией на примере альтернативного выбора, где POSIX находит самое длинное совпадение:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  rePosix := regexp.MustCompilePOSIX(`a|ab`)
  reStd := regexp.MustCompile(`a|ab`)

  resPosix := rePosix.FindString("abc")
  resStd := reStd.FindString("abc")

  fmt.Println("POSIX:", resPosix)
  fmt.Println("Standard:", resStd)
}

Результат выполнения кода:

go"POSIX: ab"
"Standard: a"

Пример

Функция вызывает панику при некорректном регулярном выражении. Давайте посмотрим, что произойдет при попытке скомпилировать невалидное выражение:

gopackage main

import (
  "fmt"
  "regexp"
)

func main() {
  defer func() {
    if r := recover(); r != nil {
      fmt.Println("Panic recovered:", r)
    }
  }()

  re := regexp.MustCompilePOSIX(`[0-9+`)
  res := re.FindString("abc123")
  fmt.Println(res)
}

Результат выполнения кода:

go"Panic recovered: error parsing regexp: missing closing ]: `[0-9+`"

Смотрите также

  • функцию regexp.CompilePOSIX,
    которая компилирует POSIX-совместимое выражение с возвратом ошибки
  • функцию regexp.MustCompile,
    которая компилирует стандартное выражение с паникой при ошибке
  • функцию regexp.Compile,
    которая компилирует стандартное выражение с возвратом ошибки
  • метод Regexp.FindString,
    который находит первое совпадение в строке