0Pricing
Swift Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Литералы Regex и сопоставление
  2. Захватывающие группы
  3. RegexBuilder DSL
  4. Замена и разделение текста
← Назад к Swift Academy