string.gsub وstring.gmatch
استبدل مطابقات الأنماط في السلاسل النصية وكرّر عبرها
string.gsub وstring.gmatch درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
أساسيات string.gsub
تستبدل string.gsub(s, pattern, repl, n) التطابقات مع pattern في s باستخدام repl، بحد أقصى n مرات (والقيمة الافتراضية: الكل). وتُرجع السلسلة الناتجة وعدد عمليات الاستبدال التي أُجريت. يمكن أن يكون الاستبدال سلسلة نصية أو جدولًا أو دالة.
local s = "hello world hello"
local result, count = string.gsub(s, "hello", "hi")
print(result) -- hi world hi
print(count) -- 2
-- Limit replacements
local r2 = string.gsub(s, "hello", "hi", 1)
print(r2) -- hi world helloمراجع الالتقاط في الاستبدال
تشير %1 و%2 وما إلى ذلك في سلسلة الاستبدال إلى عمليات الالتقاط في النمط. ويشير %0 إلى التطابق الكامل. استخدم ذلك لإعادة ترتيب النص المطابق أو إحاطته.
-- Swap first and last name
local name = "Smith, John"
local swapped = string.gsub(name, "(%a+), (%a+)", "%2 %1")
print(swapped) -- John Smith
-- Wrap numbers in brackets
local text = "items: 3 and 7 total 10"
local tagged = string.gsub(text, "%d+", "[%0]")
print(tagged) -- items: [3] and [7] total [10]الدالة كبديل
عندما يكون الاستبدال دالة، تستدعيها gsub مع كل تطابق (أو مع عمليات الالتقاط)، وتستخدم القيمة التي تُرجعها كاستبدال. أعد nil أو false للإبقاء على التطابق الأصلي. يتيح ذلك إجراء استبدالات ديناميكية محسوبة.
local env = {NAME="Lua", VERSION="5.4"}
local template = "Welcome to $NAME version $VERSION!"
local result = string.gsub(template, "%$(%w+)", env)
print(result) -- Welcome to Lua version 5.4!
-- Double each number
local s = "a1 b2 c3"
local r = string.gsub(s, "%d+", function(n)
return tostring(tonumber(n) * 2)
end)
print(r) -- a2 b4 c6الجدول كبديل
عندما يكون الاستبدال جدولًا، تبحث gsub عن كل تطابق (أو عن الالتقاط الأول) في الجدول، وتستخدم النتيجة. إذا أعاد البحث nil أو false، يُحافَظ على التطابق الأصلي. وهذا مثالي لقواميس الاستبدال.
local abbreviations = {
str = "string",
num = "number",
tbl = "table",
fn = "function",
}
local text = "A str can hold a num or a tbl"
local expanded = string.gsub(text, "%a+", abbreviations)
print(expanded)
-- A string can hold a number or a tableأساسيات string.gmatch
تُرجع string.gmatch(s, pattern) مكرّرًا على جميع التطابقات مع pattern في s. ويُرجع كل استدعاء للمكرّر التطابق التالي (أو عمليات الالتقاط إذا كان النمط يتضمنها). وهذه هي الطريقة الاصطلاحية للتكرار على التطابقات في Lua.
local s = "one=1 two=2 three=3"
-- Iterate all words
for word in string.gmatch(s, "%a+") do
io.write(word .. " ")
end
print() -- one two three
-- Iterate key=value pairs
for k, v in string.gmatch(s, "(%a+)=(%d+)") do
print(k, v)
endتقسيم الرموز باستخدام gmatch
استخدم string.gmatch لتقسيم الإدخال إلى رموز: فقسّمه حسب المسافات البيضاء، أو حلّل صفوف CSV، أو استخرج بيانات منظمة. يحدد النمط ما يجب التقاطه، بينما يُعامل كل ما عداه كفاصل.
-- Split by whitespace
local function tokenize(s)
local tokens = {}
for token in string.gmatch(s, "%S+") do
tokens[#tokens+1] = token
end
return tokens
end
local toks = tokenize(" hello world lua ")
for i, t in ipairs(toks) do
print(i, t)
end
-- 1 hello 2 world 3 luaتحليل معاملات URL
حلّل سلاسل الاستعلام بالتكرار على أزواج المفتاح والقيمة. يلتقط النمط ([^&=]+)=([^&]+) كل مفتاح وقيمة يفصل بينهما =، وتقع الأزواج بين فواصل &.
local url_params = "name=Alice&age=30&city=Istanbul"
local params = {}
for key, value in string.gmatch(url_params, "([^&=]+)=([^&]*)") do
params[key] = value
end
print(params.name) -- Alice
print(params.age) -- 30
print(params.city) -- Istanbulإزالة وسوم HTML
من مهام معالجة النصوص الشائعة إزالة وسوم HTML من سلسلة نصية. استخدم string.gsub مع نمط يطابق وسوم الفتح والإغلاق، واستبدلها بسلسلة نصية فارغة.
local html = "<h1>Hello</h1> <p>World <b>bold</b></p>"
local plain = string.gsub(html, "<[^>]+>", "")
print(plain) -- Hello World bold
-- Replace <br> with newline
local html2 = "line1<br>line2<br/>line3"
local fixed = string.gsub(html2, "<br/?>", "\n")
print(fixed)إلغاء محارف الأنماط الخاصة
محارف الأنماط الخاصة في Lua هي: . + * ? [ ] ^ $ % ( ). لمطابقتها حرفيًا، أسبقها بمحرف الهروب %. وعند استخدام سلاسل نصية عادية تتضمن هذه المحارف، مرّر true باعتباره الوسيط الرابع إلى string.find لتعطيل مطابقة الأنماط.
-- Escape a string for use in a pattern
local function escapePattern(s)
return (string.gsub(s, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"))
end
local query = "1+1=2"
local pattern = escapePattern(query)
print(string.find("result: 1+1=2", pattern, 1)) -- 9 13عدّ مرات الظهور
استخدم قيمة الإرجاع الثانية من string.gsub (عدد عمليات الاستبدال) لعدّ مرات ظهور نمط في سلسلة نصية، حتى من دون إجراء أي استبدال.
local text = "banana"
local _, count = string.gsub(text, "a", "")
print("'a' appears " .. count .. " times") -- 3
-- Count words
local sentence = "the quick brown fox"
local _, wordCount = string.gsub(sentence, "%S+", "")
print("Words:", wordCount) -- 4تحقق سريع
ماذا تُرجع string.gsub("hello", "l", "L")؟
مراجعة: gsub وgmatch
الملخص:
gsub(s, pat, repl, n)— استبدال؛ ويمكن أن يكون repl سلسلة نصية أو جدولًا أو دالة- تشير
%1...%nفي سلاسل الاستبدال إلى عمليات الالتقاط gmatch(s, pat)— التكرار على جميع التطابقات- استخدم
%لإلغاء محارف النمط الخاصة:%.و%+وغيرهما - عدّ مرات الظهور: قيمة الإرجاع الثانية من gsub
الأسئلة الشائعة
هل درس «string.gsub وstring.gmatch» مجاني؟
نعم — نص درس «string.gsub وstring.gmatch» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «string.gsub وstring.gmatch»؟
استبدل مطابقات الأنماط في السلاسل النصية وكرّر عبرها تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «string.gsub وstring.gmatch»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات السلاسل النصية: الربط والطول
- العثور على السلاسل الفرعية واستخراجها
- string.format لإخراج النصوص
- string.gsub وstring.gmatch