0Pricing
Swift Academy · Lekcja

DSL RegexBuilder

Tworzenie wyrażeń regularnych za pomocą czytelnego buildera.

DSL RegexBuilder to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

DSL RegexBuilder

Złożone literały wyrażeń regularnych stają się trudne do odczytania. Moduł RegexBuilder pozwala tworzyć wzorce z kodu Swift za pomocą DSL opartego na result builderze, z nazwanymi komponentami i typami.

Importowanie RegexBuilder

Należy zaimportować moduł, a następnie utworzyć Regex za pomocą buildera Regex { ... }. Każdy wiersz wewnątrz niego jest kolejną częścią wzorca.

import RegexBuilder

let re = Regex {
    "ID-"
    OneOrMore(.digit)
}
print("ID-42".contains(re))

OneOrMore

OneOrMore(...) dopasowuje co najmniej jeden element danego komponentu i jest odpowiednikiem +. .digit to wbudowana klasa znaków.

import RegexBuilder

let number = Regex {
    OneOrMore(.digit)
}
if let m = "abc789".firstMatch(of: number) {
    print(m.0)
}

ZeroOrMore i Optionally

ZeroOrMore oznacza *, a Optionally oznacza ?. Dzięki nim części wzorca mogą się powtarzać lub być pomijane.

import RegexBuilder

let re = Regex {
    "color"
    Optionally("u")
    "r"
}
print("colour".wholeMatch(of: re) != nil)
print("color".wholeMatch(of: re) != nil)

Capture

Capture { ... } tworzy grupę przechwytującą. Dopasowany podnapis pojawia się w krotce wynikowej, podobnie jak w przypadku nawiasów w literałach.

import RegexBuilder

let re = Regex {
    "v"
    Capture { OneOrMore(.digit) }
}
if let m = "v123".wholeMatch(of: re) {
    print("Version: \(m.1)")
}

Przekształcanie przechwyceń

Capture może zawierać domknięcie transformujące, które konwertuje dopasowany tekst na wartość określonego typu, dzięki czemu wynik ma już typ Int lub inny.

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

Użyj CharacterClass albo wbudowanych elementów, takich jak .word, .whitespace i zakresy, na przykład ("a"..."z"), aby określić dozwolone znaki.

import RegexBuilder

let re = Regex {
    One(.word)
    ZeroOrMore(("a"..."z"))
}
print("hello".contains(re))

Kotwice w builderze

Dodaj Anchor.startOfLine i Anchor.endOfLine, aby definiować asercje pozycyjne wewnątrz buildera.

import RegexBuilder

let re = Regex {
    Anchor.startOfLine
    OneOrMore(.digit)
    Anchor.endOfLine
}
print("100".wholeMatch(of: re) != nil)

Komponenty wielokrotnego użytku

Podwzorce można przechowywać w zmiennych i składać z nich większe wzorce, dzięki czemu rozbudowane wyrażenia regularne są modularne i czytelne.

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])
}

Wiele przechwyceń

Każdy element Capture dodaje kolejny element wyniku, dlatego parser daty udostępnia osobno rok, miesiąc i dzień.

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)")
}

Wybór między DSL a literałem

Literałów należy używać dla krótkich wzorców, a DSL dla długich wzorców, które zyskują na nazwach, typach i transformacjach. Są wzajemnie zamienne i można je nawet zagnieżdżać.

import RegexBuilder

let re = Regex {
    "#"
    Capture { /[0-9a-fA-F]{6}/ }
}
if let m = "#FF8800".wholeMatch(of: re) {
    print("Hex: \(m.1)")
}

Szybkie sprawdzenie

Który komponent RegexBuilder dopasowuje co najmniej jedno wystąpienie elementu?

Podsumowanie

DSL RegexBuilder tworzy wyrażenia regularne z kodu Swift za pomocą Regex { }, wykorzystując OneOrMore, Optionally, Capture z transformacjami, klasy znaków i kotwice. Dzięki temu złożone wzorce są czytelne i bezpieczne typowo. Następnie tekst zostanie zmodyfikowany przez zastępowanie i dzielenie.

Często zadawane pytania

Czy lekcja „DSL RegexBuilder” jest bezpłatna?

Tak — pełny tekst „DSL RegexBuilder” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „DSL RegexBuilder”?

Tworzenie wyrażeń regularnych za pomocą czytelnego buildera. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „DSL RegexBuilder”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Literały wyrażeń regularnych i dopasowywanie
  2. Grupy przechwytujące
  3. DSL RegexBuilder
  4. Zastępowanie i dzielenie tekstu
← Powrót do Swift Academy