0Pricing
Ruby Academy · درس

المطابقة والالتقاط

match وcaptures

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

كائنات MatchData

عند استدعاء regex.match(string) تعيد Ruby كائنًا من نوع MatchData عند النجاح، أو nil عند الفشل.

يحتوي MatchData على النص المطابق وأي مجموعات ملتقطة.

m = /world/.match('hello world')
puts m.class
puts(m[0])

التطابق الكامل: الفهرس 0

يحتوي الفهرس 0 في MatchData دائمًا على السلسلة الفرعية المطابقة بأكملها، بغض النظر عن المجموعات الموجودة.

m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)

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

تنشئ الأقواس ( ) مجموعات التقاط. ويمكن الوصول إلى كل مجموعة باستخدام رقم يبدأ من 1.

m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])

الأسلوب captures

يعيد captures مصفوفة تحتوي على جميع مجموعات الالتقاط (باستثناء التطابق الكامل الموجود في الفهرس 0).

m = /(\w+)@(\w+)/.match('alice@example')
p m.captures

تفكيك الالتقاطات

بما أن captures يعيد مصفوفة، يمكنك تفكيك النتيجة مباشرةً إلى متغيرات.

user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts host

التطابق السابق واللاحق

يوفر MatchData أساليب مساعدة للنص المحيط بالتطابق:

  • pre_match الجزء السابق للتطابق
  • post_match الجزء اللاحق للتطابق
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)

استخدام scan للعثور على جميع التطابقات

يعيد String#scan مصفوفة تحتوي على كل التطابقات في السلسلة النصية، وليس التطابق الأول فقط.

nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p nums

استخدام scan مع المجموعات

إذا احتوى نمطك على مجموعات، يعيد scan مصفوفة من المصفوفات، واحدة لكل تطابق، وتحتوي كل منها على الالتقاطات الخاصة بذلك التطابق.

pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairs

التعامل الآمن مع nil

تذكر دائمًا أن match يعيد nil عندما لا يحدث أي تطابق. تحقق من ذلك قبل استخدام النتيجة.

m = /(\d+)/.match('no digits here')
if m
  puts m[1]
else
  puts 'no match found'
end

المتغيرات الخاصة

بعد نجاح المطابقة، تضبط Ruby متغيرات عامة: يحتوي $~ على MatchData، بينما يحتوي $1 و$2 على الالتقاطات المرقمة.

تُعد هذه المتغيرات مفيدة في البرامج النصية السريعة، لكن استخدام MatchData بشكل صريح أوضح في التعليمات البرمجية الفعلية.

if 'name: Alice' =~ /name: (\w+)/
  puts $1
end

استخراج تاريخ

اجمع بين المجموعات والالتقاطات لاستخراج بيانات منظمة من سلسلة نصية في خطوة واحدة.

year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"

اختبار سريع

بالنظر إلى 'a=1 b=2'.scan(/(\w)=(\d)/)، ما شكل النتيجة؟

مراجعة: المطابقة والالتقاط

يمكنك الآن استخراج البيانات من التطابقات:

  • يعيد match كائن MatchData أو القيمة nil
  • يحتوي الفهرس 0 على التطابق الكامل، بينما تحتوي الفهارس 1 وما بعدها على المجموعات
  • يعيد captures جميع المجموعات في مصفوفة
  • يعثر scan على كل تطابق في السلسلة النصية
  • تحقق دائمًا من عدم كون القيمة nil
p 'x1 y2 z3'.scan(/([a-z])(\d)/)

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

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

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

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

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

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

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

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

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

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

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

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

  1. ثوابت Regex
  2. المطابقة والالتقاط
  3. الاستبدال
  4. المجموعات المسماة والمراسي
← العودة إلى Ruby Academy