مقدمة في أنماط النصوص
جزء من قسم المنطق والتحكم في التدفق في رحلة Lua على Coddy — الدرس 36 من 54.
عندما استخدمت string.gsub() في الدرس السابق، بحثت عن نص محدد مثل المسافات أو كلمات معينة. ولكن ماذا لو كنت بحاجة إلى العثور على "أي رقم" أو "أي حرف" دون معرفة الحرف الفعلي؟ هنا يأتي دور أنماط النصوص (string patterns).
تعد أنماط السلاسل النصية (String patterns) في Lua وسيلة لوصف نوع النص الذي تبحث عنه، بدلاً من النص الفعلي نفسه. فهي أبسط من التعبيرات النمطية (regular expressions) ولكنها قوية بما يكفي لمعظم مهام معالجة النصوص.
توفر Lua رموزًا خاصة تسمى فئات الأحرف (character classes) التي تطابق فئات معينة من الأحرف. إليك أكثرها شيوعًا:
%d -- تطابق أي رقم (0-9)
%a -- تطابق أي حرف (a-z, A-Z)
%s -- تطابق أي مسافة بيضاء (مسافة، علامة جدولة، سطر جديد)
%w -- تطابق أي حرف أبجدي رقمي (أحرف وأرقام)
%p -- تطابق أي علامة ترقيمإليك كيفية استخدام هذه الأنماط مع string.find() لتحديد موقع أول رقم في سلسلة نصية:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- المخرجات: 6يمكنك أيضاً استخدام إصدارات الأحرف الكبيرة من هذه الفئات لمطابقة العكس. على سبيل المثال، %D تطابق أي حرف ليس رقماً، و %A تطابق أي حرف ليس حرفاً.
التحدي
سهلاكتب دالة containsDigit تأخذ text وتعيد ما إذا كان النص يحتوي على رقم واحد على الأقل.
استخدم string.find() مع فئة المحارف %d للتحقق مما إذا كان هناك أي رقم موجود في السلسلة النصية.
المعاملات:
text(string): النص المراد فحصه بحثاً عن أرقام
النتيجة المسترجعة: true إذا كان النص يحتوي على رقم واحد على الأقل، و false خلاف ذلك (boolean)
جرّب بنفسك
function containsDigit(text)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتحكم في التدفق
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()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج