الدرس 8 من 10

أنماط النصوص

هدف الدرس

الدوال find وmatch وgmatch وgsub

01

الشرح

في مكتبة النصوص أربع دوال تبحث باستعمال الأنماط (patterns): find تُرجع موضع أول تطابق، وmatch تُرجع ما التقطته الأقواس، وgmatch تمرّ على كل التطابقات في حلقة for، وgsub تستبدلها كلها. وبهذه الدوال تقرأ أوامر الدردشة وسجلّات الخادم.

لكن أنماط Lua ليست regex، فالرموز الخاصّة فيها تبدأ بـ % لا بـ \، فـ %d رقم، و%a حرف لاتيني، و%s مسافة، و+ تعني مرّة أو أكثر. والأقواس تلتقط ما بداخلها، و^ في أول النمط تجعل التطابق يبدأ من أول النصّ، و$ في آخره تجعله ينتهي عند آخر النصّ. وليس فيها | ولا {2,3} ولا \b.

والرموز ^ $ ( ) % . [ ] * + - ? لها معنى خاصّ، فإذا أردت أن تبحث عن أحدها كما هو فاكتب قبله %، مثل %^ و%.. وmatch تُرجع نصوصًا، فحوّل الأرقام بـ tonumber. أما gsub فتُرجع قيمتين هما النصّ وعدد الاستبدالات، فضع الاستدعاء بين قوسين إن أردت النصّ وحده.

02

المطلوب

اكتب parseGive(msg) بحيث تُرجع اسم الغرض ثم عدده رقمًا إذا كانت الرسالة بالضبط على شكل /give sword 3، وتُرجع nil لأي رسالة أخرى. ثم اكتب totalXp(log) التي تجمع كل +25xp وما يشبهها في السجلّ، وstripColors(msg) التي تحذف رموز الألوان من ^0 إلى ^9 كما في دردشة FiveM.

الفحوص

6 فحوص
  1. الدالة parseGive تستخرج الغرض وعدده رقمًا
  2. العدد يمكن أن يكون أكثر من خانة
  3. ترفض الرسالة التي لا تبدأ بالأمر
  4. ترفض الكلام الزائد بعد الأمر والعدد غير الرقمي
  5. الدالة totalXp تجمع كل +Nxp
  6. الدالة stripColors تحذف رموز الألوان
main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/6

يبدأ الفحص حين تجهز البيئة.

تجد 6 فحوص في بطاقة «المطلوب».