Регулярни изрази

14.11.2013

История

Проблемна област

най-общо: работа с текстови низове

Понятия и терминология

Регулярните изрази в контекста на Go

godoc regexp/syntax

Задаване на шаблон

Всеки символ, освен някои специални, означава себе си.

Цялата магия е в специалните символи:
. \| ( ) [ ] { } + \ ^ $ * ?

Някои символи са специални само в определен контекст (например символът -)

\ пред специален символ го прави неспециален такъв.

Компилация на регулярен израз

re, err := regexp.Compile(`Hello`)
re := regexp.MustCompile(`Hello`)

Второто изпада в паника, ако регулярният израз не е валиден

Пример

re, err := regexp.Compile(`Hello`)

if err != nil {
    fmt.Printf("There is a problem with your regexp.\n")
    return
}

if re.MatchString("Hello Regular Expression.") == true {
    fmt.Printf("Match ")
} else {
    fmt.Printf("No match ")
}

Специални символи (meta characters)

re := regexp.MustCompile(`day|nice`)
re.MatchString("A nice dance-day")

Екраниране на специалните символи (escape-ване)

Класове от символи (character classes)

re := regexp.MustCompile(`H\wllo`)
fmt.Printf("%v", re.MatchString("Hello Regular Expression."))

Предефинирани класове от символи

ASCII character classes:

Unicode character class names--scripts:

re := regexp.MustCompile(`\p{Cyrillic}`)
fmt.Printf("%v", re.FindString("Bаba"))

Котви

Повторители (quantifiers)

Алчност (greedy)

Групи и прихващане

Символите ( и ) се използват за логическо групиране на части от шаблона с цел:

Флагове

regexp.Compile(`(?i)n`)

Regular Expression Matching Can Be Simple And Fast

(but is slow in Java, Perl, PHP, Python, Ruby, ...)
Russ Cox
rsc@swtch.com
January 2007

Въпроси?