مقدمة في أنماط النصوص
جزء من قسم Logic & Flow في رحلة 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)
ورقة مرجعية
تصف أنماط السلاسل النصية (String patterns) في Lua نوع النص الذي تبحث عنه، بدلاً من النص الفعلي نفسه.
توفر Lua رموزاً خاصة تسمى فئات الأحرف (character classes) والتي تطابق فئات معينة من الأحرف:
%d -- matches any digit (0-9)
%a -- matches any letter (a-z, A-Z)
%s -- matches any whitespace (space, tab, newline)
%w -- matches any alphanumeric character (letters and digits)
%p -- matches any punctuation characterيمكنك استخدام إصدارات الأحرف الكبيرة (Uppercase) لمطابقة العكس. على سبيل المثال، %D تطابق أي حرف ليس رقماً، و %A تطابق أي حرف ليس حرفاً أبجدياً.
استخدام فئات الأحرف مع string.find():
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Output: 6جرّب بنفسك
function containsDigit(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()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج