Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

string.match()

جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 38 من 54.

بينما يخبرك string.find() بمكان ظهور نمط معين في سلسلة نصية، فأنت تحتاج أحياناً إلى استخراج النص الفعلي الذي تمت مطابقته. وهنا يأتي دور string.match()، والذي يصبح أكثر قوة عند استخدامه مع الالتقاطات (captures).

تسمح لك الالتقاطات (Captures) بتمييز أجزاء محددة من النمط الذي تريد استخراجه. يمكنك إنشاء التقاط عن طريق إحاطة جزء من نمطك بين قوسين (). عندما تجد الدالة string.match() تطابقاً، فإنها تعيد النص الملتقط بدلاً من مجرد الموقع.

إليك مثال بسيط لاستخراج رقم من سلسلة نصية:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- المخرجات: 100

النمط %d+ يعني "رقم واحد أو أكثر". الـ + هو معدل يطابق واحداً أو أكثر من فئة الأحرف السابقة، مما يسمح لك بالتقاط أرقام متعددة الخانات.

يمكنك استخدام الالتقاطات (captures) لاستخراج أجزاء محددة من نمط أكثر تعقيداً:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- المخرج: Alice

هنا، الأقواس حول %a+ تخبر Lua بالتقاط تسلسل الأحرف الذي يأتي بعد "User: ". يساعد باقي النمط في تحديد الموقع الصحيح، ولكن يتم إرجاع الجزء الملتقط فقط.

إذا كان النمط الخاص بك يحتوي على عمليات التقاط متعددة، فإن string.match() تُرجعها جميعاً كقيم منفصلة، والتي يمكنك تعيينها لمتغيرات متعددة في وقت واحد.

challenge icon

التحدي

سهل

اكتب دالة extractPrice تأخذ text وتعيد قيمة السعر الموجودة في السلسلة النصية.

استخدم string.match() مع نمط التقاط لاستخراج السعر الرقمي الذي يظهر بعد علامة الدولار. يجب أن يلتقط النمط رقماً واحداً أو أكثر باستخدام %d+.

المعاملات:

  • text (string): سلسلة نصية تحتوي على سعر بتنسيق "Price: $XX"

القيمة المرجعة: السعر الرقمي كسلسلة نصية (string)

ورقة مرجعية

استخدم string.match() لاستخراج النص الذي يطابق نمطاً معيناً:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- المخرجات: 100

المعدل + يطابق حرفاً واحداً أو أكثر من فئة الأحرف السابقة:

%d+  -- رقم واحد أو أكثر
%a+  -- حرف واحد أو أكثر

استخدم الأقواس () لإنشاء التقاطات (captures) تستخرج أجزاءً محددة من النمط:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- المخرجات: Alice

الالتقاطات المتعددة تعيد قيماً منفصلة:

local var1, var2 = string.match(text, "(pattern1)(pattern2)")

جرّب بنفسك

function extractPrice(text)
    -- اكتب الكود هنا
end
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow