0Pricing
Swift Academy · レッスン

RegexBuilder DSL

読みやすいビルダーで正規表現を組み立てます。

「RegexBuilder DSL」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

RegexBuilder DSL

複雑な正規表現リテラルは読みにくくなります。RegexBuilder モジュールを使うと、名前付きコンポーネントと型を備えた result-builder DSL により、Swift コードからパターンを作成できます。

RegexBuilder のインポート

まずモジュールをインポートし、Regex { ... } ビルダーで Regex を作成します。内部の各行が、パターンを構成する順番どおりの要素になります。

import RegexBuilder

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

OneOrMore

OneOrMore(...) は指定したコンポーネントに 1 回以上マッチし、+ と同等です。.digit は組み込みの文字クラスです。

import RegexBuilder

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

ZeroOrMore と Optionally

ZeroOrMore は *、Optionally は ? に相当します。これらを使うと、パターンの一部を繰り返したり省略したりできます。

import RegexBuilder

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

Capture

Capture { ... } はキャプチャグループを作成します。マッチした部分文字列は、リテラル内の括弧と同じように出力タプルに現れます。

import RegexBuilder

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

キャプチャの変換

Capture には、マッチしたテキストを型付きの値に変換する transform closure を含めることができます。そのため、出力をすでに 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 は順番に出力要素を追加するため、日付パーサーでは年、月、日を個別に取得できます。

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

クイックチェック

何かに 1 回以上マッチする RegexBuilder コンポーネントはどれですか?

まとめ

RegexBuilder DSL は、Regex { }、OneOrMore、Optionally、変換を伴う Capture、文字クラス、アンカーを使って、Swift コードから正規表現を作成します。複雑なパターンを読みやすく、型安全にできます。次は、置換と分割によってテキストを変更します。

よくある質問

「RegexBuilder DSL」レッスンは無料ですか?

はい。「RegexBuilder DSL」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「RegexBuilder DSL」で何を学びますか?

読みやすいビルダーで正規表現を組み立てます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「RegexBuilder DSL」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 正規表現リテラルとマッチング
  2. キャプチャグループ
  3. RegexBuilder DSL
  4. テキストの置換と分割
← Swift Academyに戻る