กลุ่มการจับคู่
ดึงสตริงย่อยจากผลการจับคู่
กลุ่มการจับคู่ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
กลุ่มจับค่า
วงเล็บในนิพจน์ทั่วไปจะสร้าง กลุ่มจับค่า แต่ละกลุ่มจะจดจำสตริงย่อยที่จับคู่ได้ ทำให้คุณดึงส่วนประกอบที่มีโครงสร้างออกจากการจับคู่ขนาดใหญ่ได้
การจับค่าหนึ่งรายการ
การครอบส่วนหนึ่งของรูปแบบด้วย () จะจับค่าส่วนนั้น ผลลัพธ์การจับคู่จะกลายเป็นทูเพิล โดยมีการจับคู่ทั้งหมดอยู่ก่อน แล้วจึงตามด้วยค่าที่จับได้แต่ละรายการ
if let m = "v2".firstMatch(of: /v(\d+)/) {
print("Whole: \(m.0)")
print("Group: \(m.1)")
}การจับค่าหลายรายการ
วงเล็บแต่ละคู่จะเพิ่มองค์ประกอบอีกหนึ่งรายการให้ทูเพิลผลลัพธ์ โดยเรียงจากซ้ายไปขวา
if let m = "2024-05-30".wholeMatch(of: /(\d{4})-(\d{2})-(\d{2})/) {
print("Year: \(m.1)")
print("Month: \(m.2)")
print("Day: \(m.3)")
}การจับคู่ทั้งหมดคือ .0
องค์ประกอบ .0 ของผลลัพธ์จะเป็นข้อความที่จับคู่ได้ทั้งหมดเสมอ ส่วนค่าที่จับได้จะเริ่มที่ .1
if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
print("Full: \(m.0)")
print("Key: \(m.1), Value: \(m.2)")
}ค่าที่จับได้คือสตริงย่อย
โดยค่าเริ่มต้น ค่าที่จับได้จะเป็นค่า Substring ที่ชี้ไปยังตำแหน่งภายในสตริงต้นฉบับ ให้แปลงด้วย String(...) หากต้องการเก็บค่าเหล่านั้นไว้
if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
let letters = String(m.1)
let numbers = String(m.2)
print(letters, numbers)
}ค่าที่จับได้แบบเลือกได้
หากกลุ่มเป็นแบบเลือกได้ (ตามด้วย ?) ค่าที่จับได้อาจเป็น nil เมื่อกลุ่มนั้นไม่ได้เข้าร่วมการจับคู่
if let m = "color".wholeMatch(of: /colou?(r)/) {
print("Captured: \(m.1)")
}ค่าที่จับได้ที่มีชื่อ
คุณสามารถตั้งชื่อให้กลุ่มด้วย (?<name>...) และอ่านค่าผ่านผลลัพธ์ที่มีชื่อ ซึ่งชัดเจนกว่าการใช้ดัชนีตัวเลข
let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
print("Area: \(m.area)")
print("Line: \(m.line)")
}การวนซ้ำผ่านค่าที่จับได้
ผสานค่าที่จับได้เข้ากับ matches(of:) เพื่อดึงข้อมูลที่มีโครงสร้างจากการจับคู่จำนวนมากได้ในครั้งเดียว
let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
print("\(m.1) -> \(m.2)")
}กลุ่มซ้อนกัน
กลุ่มสามารถซ้อนกันได้ กลุ่มภายนอกจะจับค่าทั้งหมด ส่วนกลุ่มภายในจะจับค่าเป็นส่วน ๆ การกำหนดหมายเลขจะเป็นไปตามลำดับของวงเล็บเปิด
if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
print("All: \(m.1)")
print("H: \(m.2), M: \(m.3)")
}กลุ่มที่ไม่จับค่า
ใช้ (?:...) เพื่อจัดกลุ่มโดยไม่จับค่า เมื่อคุณต้องการจัดกลุ่มสำหรับตัวระบุจำนวนการทำซ้ำเท่านั้น และไม่ต้องการเพิ่มองค์ประกอบในทูเพิล
if let m = "abab".wholeMatch(of: /(?:ab)+/) {
print("Matched: \(m.0)")
}การสร้างตัวแยกวิเคราะห์
ค่าที่จับได้จะเปลี่ยนข้อความดิบให้เป็นค่าที่มีชนิด ในที่นี้เราจะแยกวิเคราะห์สตริงพิกัดให้เป็นจำนวนเต็ม
func parsePoint(_ s: String) -> (Int, Int)? {
guard let m = s.wholeMatch(of: /(\d+),(\d+)/),
let x = Int(m.1), let y = Int(m.2) else { return nil }
return (x, y)
}
print(parsePoint("3,7") ?? "nil")ตรวจสอบอย่างรวดเร็ว
สำหรับรูปแบบ /(\d{4})-(\d{2})/ ที่จับคู่กับ "2024-05" ค่า m.2 คืออะไร?
สรุป
วงเล็บจะสร้าง กลุ่มจับค่าที่เข้าถึงได้ในรูปแบบทูเพิล โดย .0 คือการจับค่าทั้งหมด และ .1, .2... คือค่าที่จับได้ คุณได้เห็นกลุ่มที่มีชื่อ กลุ่มแบบเลือกได้ กลุ่มซ้อนกัน และกลุ่มที่ไม่จับค่าแล้ว ถัดไป คุณจะสร้างนิพจน์ทั่วไปจากโค้ด Swift ที่อ่านง่ายด้วย RegexBuilder
คำถามที่พบบ่อย
บทเรียน “กลุ่มการจับคู่” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กลุ่มการจับคู่” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กลุ่มการจับคู่”
ดึงสตริงย่อยจากผลการจับคู่ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “กลุ่มการจับคู่” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ