Регулярные выражения в языке Go
Регулярное выражение (сокращённо regex или regexp) — мощный инструмент для сопоставления строк.
Регулярные выражения задают шаблон, позволяющий быстро искать, заменять или извлекать строки, соответствующие этому шаблону. Подробнее см.Руководство по регулярным выражениям。
В Go регулярные выражения обрабатываются черезregexpРеализуется с помощью пакета.
В языке GoregexpПакет
Стандартная библиотека Go предоставляетregexpпакет, используемый для обработки регулярных выражений. Следующиеregexpчасто используемые функции и методы в пакете:
CompileиMustCompile
Используется для компиляции регулярных выражений.Compileвозвращает*Regexpобъект и ошибку, тогда какMustCompileнепосредственно запаникует, если компиляция не удастся.MatchString
Проверяет, соответствует ли строка регулярному выражению.FindStringиFindAllString
Используется для поиска совпадающих строк.FindStringВозвращает первое совпадение,FindAllStringВозвращает все совпадения.ReplaceAllString
Используется для замены совпавших строк.Split
Разделяет строки на основе регулярного выражения.
Базовый синтаксис регулярных выражений
Ниже приведены некоторые часто используемые синтаксические конструкции регулярных выражений:
.: соответствует любому одиночному символу (кроме новой строки).*: соответствует предыдущему символу 0 или более раз.+: соответствует предыдущему символу 1 или более раз.?: соответствует предыдущему символу 0 или 1 раз.\d: соответствует цифровым символам (эквивалентно[0-9])。\w: соответствует буквам, цифрам или символам подчёркивания (эквивалентно[a-zA-Z0-9_])。\s: соответствует пробельным символам (включая пробелы, табуляции, переводы строк и т. д.).[]: соответствует любому одному символу внутри квадратных скобок (например,[abc]совпадениеa、bилиc)。^: соответствует началу строки.$: соответствует концу строки.
Пример кода
Ниже приведены некоторые примеры использования регулярных выражений в Go:
Пример 1: Проверить, соответствует ли строка регулярному выражению
Пример
import (
"fmt"
"regexp"
)
func main() {
pattern := `^[a-zA-Z0-9]+$`
regex := regexp.MustCompile(pattern)
str := "Hello123"
if regex.MatchString(str) {
fmt.Println("Строка соответствует регулярному выражению")
} else {
fmt.Println("Строка не соответствует регулярному выражению")
}
}
Пример 2: Поиск совпадающих строк
Пример
import (
"fmt"
"regexp"
)
func main() {
pattern := `\d+`
regex := regexp.MustCompile(pattern)
str := "У меня 3 яблока и 5 бананов"
matches := regex.FindAllString(str, -1)
fmt.Println("Найденные числа:", matches)
}
Пример 3: Замена совпадающих строк
Пример
import (
"fmt"
"regexp"
)
func main() {
pattern := `\s+`
regex := regexp.MustCompile(pattern)
str := "Привет Мир"
result := regex.ReplaceAllString(str, " ")
fmt.Println("Заменённая строка:", result)
}
Пример 4: Разделение строк
Пример
import (
"fmt"
"regexp"
)
func main() {
pattern := `,`
regex := regexp.MustCompile(pattern)
str := "apple,banana,orange"
parts := regex.Split(str, -1)
fmt.Println("Строка после разделения:", parts)
}
Примечания
Проблемы производительности
Операции сопоставления и замены регулярных выражений могут потреблять значительные ресурсы, особенно при обработке больших объёмов данных. Рекомендуется использовать их с осторожностью в сценариях, чувствительных к производительности.Экранирующие символы
В Go обратные слеши в регулярных выражениях\должны быть записаны как\\, потому что обратный слеш также является символом экранирования в строках.Обработка ошибок
ИспользованиеCompileфункции, обязательно проверяйте возвращаемую ошибку, чтобы избежать падений программы.