0Pricing
Swift Academy · درس

مجموعات الالتقاط

استخرج السلاسل الفرعية من المطابقات.

مجموعات الالتقاط درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

مجموعات الالتقاط

تنشئ الأقواس في التعبير النمطي مجموعات التقاط. وتتذكر كل مجموعة السلسلة الفرعية التي طابقتها، حتى تتمكن من استخراج أجزاء منظمة من مطابقة أكبر.

التقاط واحد

يؤدي إحاطة جزء من النمط بـ () إلى التقاطه. ويصبح ناتج المطابقة tuple: المطابقة الكاملة أولًا، ثم كل التقاط.

if let m = "v2".firstMatch(of: /v(\d+)/) {
    print("Whole: \(m.0)")
    print("Group: \(m.1)")
}

التقاطات متعددة

يضيف كل زوج من الأقواس عنصرًا آخر إلى tuple الناتج، بالترتيب من اليسار إلى اليمين.

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

تكون الالتقاطات افتراضيًا قيمًا من نوع 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)")
}

المجموعات غير الملتقِطة

استخدم (?:...) للتجميع دون التقاط، عندما تحتاج إلى التجميع من أجل محدد تكرار فقط ولا تريد عنصرًا إضافيًا في tuple.

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؟

مراجعة

تنشئ الأقواس مجموعات التقاط يمكن الوصول إليها بوصفها tuple، حيث تكون .0 هي المطابقة الكاملة، وتكون .1 و.2... هي الالتقاطات. تعرّفت إلى المجموعات المُسمّاة والاختيارية والمتداخلة وغير الملتقِطة. ستبني في الخطوة التالية تعبيرات نمطية من شيفرة Swift واضحة باستخدام RegexBuilder.

الأسئلة الشائعة

هل درس «مجموعات الالتقاط» مجاني؟

نعم — نص درس «مجموعات الالتقاط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «مجموعات الالتقاط»؟

استخرج السلاسل الفرعية من المطابقات. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «مجموعات الالتقاط»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ثوابت Regex ومطابقتها
  2. مجموعات الالتقاط
  3. ‏RegexBuilder DSL
  4. استبدال النص وتقسيمه
← العودة إلى Swift Academy