التكرار باستخدام string.gmatch()
جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 39 من 54.
بينما تجد string.match() أول ظهور لنمط ما، ماذا لو كنت بحاجة للعثور على جميع التطابقات في سلسلة نصية؟ تقوم الدالة string.gmatch() بحل هذه المشكلة عن طريق إرجاع مكرر (iterator) يمكنك استخدامه في حلقة for لمعالجة كل تطابق واحداً تلو الآخر.
تبدو الصيغة الأساسية كالتالي:
for match in string.gmatch(text, pattern) do
-- معالجة كل تطابق
endإليك مثال يجد جميع الأرقام في سلسلة نصية:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- المخرجات:
-- 3
-- 5النمط %d+ يطابق رقماً واحداً أو أكثر، وتعمل الحلقة التكرارية مرة واحدة لكل رقم يتم العثور عليه.
يمكنك أيضاً استخراج جميع الكلمات من جملة:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- المخرجات:
-- Lua
-- is
-- a
-- powerful
-- languageالتحدي
سهلاكتب دالة extractHashtags تأخذ text وتعيد جميع الوسوم (hashtags) الموجودة في النص، بحيث يكون كل وسم في سطر منفصل.
استخدم string.gmatch() للعثور على جميع الوسوم في النص. يبدأ الوسم بـ # متبوعاً بحرف واحد أو أكثر.
المنطق:
- استخدم
string.gmatch()مع النمط"#%a+"للعثور على جميع الوسوم - قم بالمرور عبر كل تطابق وقم بتجميعها
- قم بربط جميع الوسوم باستخدام أحرف السطر الجديد (
\n) - إذا لم يتم العثور على أي وسوم، فقم بإرجاع سلسلة نصية فارغة
المعاملات:
text(string): النص المراد البحث فيه عن الوسوم
المخرجات: جميع الوسوم التي تم العثور عليها، كل منها في سطر منفصل. إذا لم تكن هناك وسوم، فقم بإرجاع سلسلة نصية فارغة (string)
ورقة مرجعية
تعيد الدالة string.gmatch() مكررًا (iterator) يبحث عن جميع تكرارات نمط معين في سلسلة نصية، مما يسمح لك بمعالجة كل تطابق في حلقة for.
الصيغة الأساسية:
for match in string.gmatch(text, pattern) do
-- معالجة كل تطابق
endمثال على إيجاد جميع الأرقام:
local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
print(number)
end
-- Output:
-- 3
-- 5مثال على استخراج جميع الكلمات:
local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- Output:
-- Lua
-- is
-- a
-- powerful
-- languageجرّب بنفسك
function extractHashtags(text)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية4مقدمة إلى Metatables
ما هو الـ Metatable؟setmetatable و getmetatableالـ Metamethod المسماة __indexالـ Metamethod المسماة __newindexالـ Metamethod المسماة __tostringالـ Metamethods الحسابية - الجزء الأولالـ Metamethods الحسابية - الجزء الثانيملخص - جدول للقراءة فقط7معالجة النصوص المتقدمة
استخدام string.gsub() للاستبدالمقدمة في أنماط النصوصstring.find()string.match()التكرار باستخدام string.gmatch()مراجعة - محلل ملفات السجل2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج