RegexBuilder DSL
Составляйте регулярные выражения с помощью понятного конструктора.
«RegexBuilder DSL» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.
DSL RegexBuilder
Сложные литералы регулярных выражений трудно читать. Модуль RegexBuilder позволяет создавать шаблоны из кода Swift с помощью DSL на основе конструктора результата, используя именованные компоненты и типы.
Импорт RegexBuilder
Импортируйте модуль, а затем создайте Regex с помощью конструктора Regex { ... }. Внутри каждая строка представляет последовательную часть шаблона.
import RegexBuilder
let re = Regex {
"ID-"
OneOrMore(.digit)
}
print("ID-42".contains(re))OneOrMore
OneOrMore(...) сопоставляет один или более экземпляров указанного компонента, что эквивалентно +. .digit — встроенный класс символов.
import RegexBuilder
let number = Regex {
OneOrMore(.digit)
}
if let m = "abc789".firstMatch(of: number) {
print(m.0)
}ZeroOrMore и необязательный компонент
ZeroOrMore соответствует *, а Optionally — ?. Они позволяют повторять или пропускать части шаблона.
import RegexBuilder
let re = Regex {
"color"
Optionally("u")
"r"
}
print("colour".wholeMatch(of: re) != nil)
print("color".wholeMatch(of: re) != nil)Захват
Capture { ... } создаёт группу захвата. Совпавшая подстрока появляется в выходном кортеже, как и при использовании круглых скобок в литерале.
import RegexBuilder
let re = Regex {
"v"
Capture { OneOrMore(.digit) }
}
if let m = "v123".wholeMatch(of: re) {
print("Version: \(m.1)")
}Преобразование захватов
Capture может содержать замыкание преобразования, которое превращает совпавший текст в типизированное значение, поэтому результат уже имеет тип Int или другой тип.
import RegexBuilder
let re = Regex {
Capture {
OneOrMore(.digit)
} transform: { Int($0)! }
}
if let m = "42".wholeMatch(of: re) {
let n: Int = m.1
print(n + 1)
}CharacterClass
Используйте CharacterClass или встроенные варианты, такие как .word, .whitespace, и диапазоны вроде ("a"..."z"), чтобы определить допустимые символы.
import RegexBuilder
let re = Regex {
One(.word)
ZeroOrMore(("a"..."z"))
}
print("hello".contains(re))Якоря в конструкторе
Добавьте Anchor.startOfLine и Anchor.endOfLine для позиционных проверок внутри конструктора.
import RegexBuilder
let re = Regex {
Anchor.startOfLine
OneOrMore(.digit)
Anchor.endOfLine
}
print("100".wholeMatch(of: re) != nil)Повторно используемые компоненты
Можно сохранять части шаблона в переменных и объединять их, благодаря чему большие регулярные выражения становятся модульными и понятными.
import RegexBuilder
let field = Reference(Substring.self)
let re = Regex {
Capture(as: field) { OneOrMore(.word) }
}
if let m = "name".firstMatch(of: re) {
print(m[field])
}Несколько захватов
Каждый Capture добавляет выходной элемент по порядку, поэтому разборщик date предоставляет year, месяц и день отдельно.
import RegexBuilder
let date = Regex {
Capture { Repeat(.digit, count: 4) }
"-"
Capture { Repeat(.digit, count: 2) }
}
if let m = "2024-05".wholeMatch(of: date) {
print("\(m.1) / \(m.2)")
}Выбор между DSL и литералом
Используйте литералы для коротких шаблонов, а DSL — для длинных, которым полезны имена, типы и преобразования. Они взаимозаменяемы и даже могут быть вложенными.
import RegexBuilder
let re = Regex {
"#"
Capture { /[0-9a-fA-F]{6}/ }
}
if let m = "#FF8800".wholeMatch(of: re) {
print("Hex: \(m.1)")
}Быстрая проверка
Какой компонент RegexBuilder сопоставляет один или более экземпляров чего-либо?
Итоги
DSL RegexBuilder создаёт регулярные выражения из кода Swift с помощью Regex { }, используя OneOrMore, Optionally, Capture с преобразованиями, классы символов и якоря. Он делает сложные шаблоны понятными и безопасными с точки зрения типов. Далее вы будете изменять текст с помощью замены и разделения.
Часто задаваемые вопросы
Урок «RegexBuilder DSL» бесплатный?
Да — полный текст урока «RegexBuilder DSL» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.
Чему я научусь в уроке «RegexBuilder DSL»?
Составляйте регулярные выражения с помощью понятного конструктора. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «RegexBuilder DSL»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.