0Pricing
Swift Academy · บทเรียน

DSL สำหรับ RegexBuilder

ประกอบนิพจน์ประจำด้วยตัวสร้างที่อ่านง่าย

DSL สำหรับ RegexBuilder เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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

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 แต่ละรายการจะเพิ่มองค์ประกอบผลลัพธ์ตามลำดับ ดังนั้นตัวแยกวิเคราะห์วันที่จึงแสดงปี เดือน และวันแยกจากกัน

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 ที่จับคู่สิ่งหนึ่งรายการขึ้นไป?

สรุป

RegexBuilder DSL สร้างนิพจน์ทั่วไปจากโค้ด Swift ด้วย Regex { } โดยใช้ OneOrMore, Optionally, Capture พร้อมการแปลง คลาสอักขระ และจุดยึด ช่วยให้อ่านรูปแบบที่ซับซ้อนได้ง่ายและปลอดภัยด้านชนิด ถัดไป คุณจะปรับเปลี่ยนข้อความด้วยการแทนที่และการแบ่ง

คำถามที่พบบ่อย

บทเรียน “DSL สำหรับ RegexBuilder” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “DSL สำหรับ RegexBuilder” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “DSL สำหรับ RegexBuilder”

ประกอบนิพจน์ประจำด้วยตัวสร้างที่อ่านง่าย คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “DSL สำหรับ RegexBuilder” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ค่าคงที่ Regex และการจับคู่
  2. กลุ่มการจับคู่
  3. DSL สำหรับ RegexBuilder
  4. การแทนที่และแบ่งข้อความ
← กลับไปที่ Swift Academy