Функция regexp.CompilePOSIX
Функция regexp.CompilePOSIX компилирует
регулярное выражение в объект Regexp,
используя синтаксис POSIX ERE (Extended Regular Expressions).
В отличие от стандартной Compile, которая использует
синтаксис RE2, эта функция обеспечивает совместимость
с POSIX-стандартом. В первый параметр мы передаем строку
с регулярным выражением, а возвращает функция
компилированный объект Regexp и ошибку,
если выражение некорректно.
Важное отличие POSIX-режима заключается в том, что поиск выполняется по принципу "левого самого длинного" совпадения, тогда как стандартная компиляция находит "левое самое короткое" совпадение. Это особенно заметно при работе с квантификаторами и альтернативами.
Синтаксис
regexp.CompilePOSIX(expr string) (*Regexp, error)
Пример
Давайте скомпилируем простое регулярное выражение для поиска цифр в строке:
package main
import (
"fmt"
"regexp"
)
func main() {
re, err := regexp.CompilePOSIX("[0-9]+")
if err != nil {
fmt.Println("Error:", err)
return
}
res := re.FindString("abc123def456")
fmt.Println(res)
}
Результат выполнения кода:
"123"
Пример
Рассмотрим ключевое отличие POSIX-компиляции на примере с альтернативами. В POSIX-режиме выбирается самое длинное совпадение:
package main
import (
"fmt"
"regexp"
)
func main() {
rePosix, _ := regexp.CompilePOSIX("a|ab")
reStd, _ := regexp.Compile("a|ab")
resPosix := rePosix.FindString("ab")
resStd := reStd.FindString("ab")
fmt.Println("POSIX:", resPosix)
fmt.Println("Standard:", resStd)
}
Результат выполнения кода:
"POSIX: ab"
"Standard: a"
Как видим, POSIX-версия нашла более длинное совпадение ab,
в то время как стандартная остановилась на a.
Пример
При работе с некорректным регулярным выражением функция возвращает ошибку:
package main
import (
"fmt"
"regexp"
)
func main() {
_, err := regexp.CompilePOSIX("[")
if err != nil {
fmt.Println("Error:", err)
}
}
Результат выполнения кода:
"Error: error parsing regexp: missing closing ]: `[`"
Смотрите также
-
функцию
regexp.Compile,
которая компилирует выражение в стандартном режиме RE2 -
функцию
regexp.MustCompilePOSIX,
которая компилирует выражение с паникой при ошибке -
функцию
regexp.MatchString,
которая проверяет соответствие строки регулярному выражению -
функцию
Regexp.FindString,
которая находит первое совпадение в строке