string.find()
جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 37 من 54.
الآن بعد أن فهمت فئات الأحرف، يمكنك استخدامها مع string.find() للبحث عن الأنماط بدلاً من النص المطابق تماماً. وهذا يفتح إمكانيات قوية للتحقق من صحة النصوص وتحليلها.
تعمل دالة string.find() بنفس الطريقة مع الأنماط كما تفعل مع السلاسل النصية الحرفية—فهي تعيد الموضع الذي يتطابق فيه النمط لأول مرة:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- المخرج: 5يجد هذا أول رقم في السلسلة النصية، والذي يقع في الموضع 5. يمكنك أيضاً البحث عن العكس باستخدام فئات الأحرف الكبيرة:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- المخرجات: 1هنا، %D يطابق أي حرف غير رقمي، لذا فإنه يجد الحرف الأول في الموضع 1.
تعد مهمة التحقق الشائعة هي التأكد مما إذا كانت السلسلة النصية تبدأ بنمط معين. يمكنك استخدام رمز الإرساء ^ في بداية النمط للمطابقة فقط في بداية السلسلة النصية:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endيتحقق هذا النمط مما إذا كانت السلسلة النصية تبدأ بحرف، مما يجعله مفيداً للتحقق من صحة المدخلات حيث تكون هناك حاجة إلى تنسيقات معينة.
التحدي
سهلاكتب دالة startsWithLetter تأخذ text وتعيد ما إذا كانت السلسلة النصية تبدأ بحرف.
استخدم string.find() مع المرساة ^ وفئة الأحرف %a للتحقق مما إذا كانت السلسلة النصية تبدأ بحرف.
المعاملات:
text(string): السلسلة النصية المراد التحقق من صحتها
المرجعات: true إذا كانت السلسلة النصية تبدأ بحرف، و false خلاف ذلك (boolean)
ورقة مرجعية
استخدم string.find() مع فئات الأحرف للبحث عن الأنماط في النصوص. وهي تعيد الموضع الذي يتطابق فيه النمط لأول مرة:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Output: 5تطابق فئات الأحرف الكبيرة العكس (الأحرف غير المتطابقة):
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Output: 1استخدم علامة الارتساء ^ في بداية النمط للمطابقة فقط في بداية النص:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endجرّب بنفسك
function startsWithLetter(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()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج