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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 正規表現リテラルとマッチング
- キャプチャグループ
- RegexBuilder DSL
- テキストの置換と分割