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

ค่าคงที่ Regex และการจับคู่

จับคู่รูปแบบด้วยชนิด Regex

ค่าคงที่ Regex และการจับคู่ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

นิพจน์ทั่วไปใน Swift

Swift 5.7 ขึ้นไปมี นิพจน์ทั่วไปในตัวอยู่ในไลบรารีมาตรฐานและ Foundation คุณสามารถเขียนนิพจน์ทั่วไปเป็นลิเทอรัลระหว่างเครื่องหมายทับ เช่น /\d+/ และคอมไพเลอร์จะตรวจสอบให้ขณะสร้างโปรแกรม

ลิเทอรัลนิพจน์ทั่วไป

ลิเทอรัลนิพจน์ทั่วไปจะสร้างค่า Regex ชนิดของค่าจะระบุสิ่งที่การจับคู่ส่งกลับ รูปแบบที่ง่ายที่สุดจะจับคู่ลำดับอักขระที่กำหนดไว้ตายตัว

let pattern = /hello/
if "hello world".contains(pattern) {
    print("Found hello")
}

wholeMatch(of:)

wholeMatch(of:) จะสำเร็จต่อเมื่อสตริง ทั้งหมดตรงกับรูปแบบเท่านั้น โดยจะส่งกลับการจับคู่แบบมีค่าหรือ nil หากสตริงทั้งหมดไม่ตรงกับรูปแบบ

let digits = /\d+/
if let m = "12345".wholeMatch(of: digits) {
    print("Whole match: \(m.output)")
} else {
    print("No whole match")
}

firstMatch(of:)

firstMatch(of:) จะค้นหาสตริงและส่งกลับ ตำแหน่งแรกที่รูปแบบตรงกันไม่ว่าจะอยู่ที่ใดภายในสตริง

let word = /\w+/
if let m = "  swift rocks".firstMatch(of: word) {
    print("First word: \(m.output)")
}

การเข้าถึงช่วงของการจับคู่

การจับคู่จะแสดง range ในสตริงต้นฉบับ ทำให้ทราบได้อย่างแน่ชัดว่าเกิดขึ้นที่ใด

let text = "abc123def"
if let m = text.firstMatch(of: /\d+/) {
    print("Matched: \(m.output)")
    print("At: \(text[m.range])")
}

คลาสอักขระ

ภายในรูปแบบ \d จะจับคู่ตัวเลข \w จะจับคู่อักขระคำ และ \s จะจับคู่ช่องว่าง วงเล็บเหลี่ยมใช้กำหนดชุดอักขระแบบกำหนดเอง เช่น [aeiou]

let vowel = /[aeiou]/
if let m = "sky".firstMatch(of: vowel) {
    print("Vowel: \(m.output)")
} else {
    print("No vowels found")
}

ตัวระบุจำนวนการทำซ้ำ

ตัวระบุจำนวนการทำซ้ำควบคุมการทำซ้ำ: * หมายถึงศูนย์ครั้งขึ้นไป + หมายถึงหนึ่งครั้งขึ้นไป ? หมายถึงเลือกมีหรือไม่มีก็ได้ และ {n,m} หมายถึงจำนวนที่อยู่ภายในขอบเขต

let phone = /\d{3}-\d{4}/
print("555-1234".wholeMatch(of: phone) != nil)
print("12-34".wholeMatch(of: phone) != nil)

จุดยึด

ใช้ ^ เพื่อยึดที่จุดเริ่มต้น และใช้ $ ที่จุดสิ้นสุดของบรรทัด จุดยึดไม่ใช้พื้นที่ของอักขระ แต่เป็นการยืนยันตำแหน่ง

let startsWithCap = /^[A-Z]\w*/
if let m = "Swift".firstMatch(of: startsWithCap) {
    print("Matched: \(m.output)")
}

การจับคู่โดยไม่คำนึงถึงตัวพิมพ์

คุณสามารถไม่สนใจตัวพิมพ์ได้โดยต่อท้ายค่า regex ด้วย .ignoresCase() ซึ่งมีประโยชน์เมื่อไม่สามารถคาดเดารูปแบบตัวพิมพ์ของข้อมูลเข้าได้

let pattern = /swift/.ignoresCase()
print("I love SWIFT".contains(pattern))

การจับคู่ด้วย matches(of:)

matches(of:) ส่งกลับคอลเลกชันของการจับคู่ที่ไม่ซ้อนทับกันทุกแห่งในสตริง ทำให้คุณวนซ้ำผ่านการจับคู่ทั้งหมดได้

let nums = "a1 b22 c333"
for m in nums.matches(of: /\d+/) {
    print(m.output)
}

การตรวจสอบข้อมูลเข้า

การใช้งานทั่วไปอย่างหนึ่งคือการตรวจสอบความถูกต้อง: สร้างรูปแบบสำหรับรูปแบบทั้งหมดที่คาดหวัง แล้วตรวจสอบด้วย wholeMatch ซึ่งจะส่งกลับ nil เมื่อไม่ตรงกัน

func isZip(_ s: String) -> Bool {
    s.wholeMatch(of: /\d{5}/) != nil
}
print(isZip("90210"))
print(isZip("ABCDE"))

ตรวจสอบอย่างรวดเร็ว

เมธอดใดจะสำเร็จต่อเมื่อสตริงทั้งหมดตรงกับรูปแบบ?

สรุป

คุณได้เรียนรู้การเขียน ลิเทอรัลนิพจน์ทั่วไปด้วยเครื่องหมายทับ และการจับคู่โดยใช้ wholeMatch(of:), firstMatch(of:) และ matches(of:) นอกจากนี้ยังได้เรียนรู้คลาสอักขระ ตัวระบุจำนวนการทำซ้ำ จุดยึด และการจับคู่โดยไม่คำนึงถึงตัวพิมพ์ ถัดไป คุณจะดึงข้อมูลออกจากการจับคู่ด้วยกลุ่มจับค่า

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

บทเรียน “ค่าคงที่ Regex และการจับคู่” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ค่าคงที่ Regex และการจับคู่”

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

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

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

บทเรียน “ค่าคงที่ Regex และการจับคู่” ใช้เวลานานแค่ไหน

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

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

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

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

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