عبارات با الگو (Patterns) در لوا
الگوی لوا (جایگزین regex): string.find، match، gmatch و gsub با کلاسهای کاراکتری
الگو در لوا — نه Regex!
لوا بهجای عبارات باقاعده کامل (Regex)، سیستم الگو (Pattern) سادهتر و سبکتری دارد — برای اکثر کارها کافی است!
کلاسهای کاراکتری
| کلاس | معنی |
|---|---|
%a | حروف |
%d | ارقام |
%s | فاصله |
%w | حروف و اعداد |
%l / %u | حروف کوچک/بزرگ |
%p | علائم نگارشی |
%. | نقطه واقعی |
. | هر کاراکتری |
برای معکوس (negate)، حرف را بزرگ کنید:
%D یعنی «هر چیزی جز رقم»!quantifier ها
| الگو | معنی |
|---|---|
* | صفر یا بیشتر (حریصانه) |
+ | یک یا بیشتر |
- | صفر یا بیشتر (تنبل) |
? | اختیاری (صفر یا یک) |
string.match — استخراج
local s = "ساعت 14:30 است"
-- ساعت:دقیقه با capture
local hour, min = s:match("(%d+):(%d+)")
print(hour, min) -- 14 30
-- تاریخ
local date = "2024-06-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d) -- 2024 06 15
string.gmatch — همه تطبیقها
local text = "قیمت: 1500 تومان، مالیات: 300 تومان"
for number in text:gmatch("%d+") do
print("عدد:", number)
end
string.gsub با الگو
-- حذف همه ارقام
local clean = ("abc123def456"):gsub("%d+", "")
print(clean) -- abcdef
-- مخفی کردن شماره تلفن
local masked = ("09123456789"):gsub("%d", "*")
print(masked) -- ***********
-- جایگزینی با capture
local name = "علی، مریم"
local swapped = name:gsub("(%S+)، (%S+)", "%2 و %1")
print(swapped) -- مریم و علی
مثال: جدا کردن کلمات
local function words(s)
local result = {}
for w in s:gmatch("%S+") do
table.insert(result, w)
end
return result
end
لنگرها (Anchors)
-- ^ یعنی ابتدای رشته
print(("سلام"):match("^س")) -- س
-- $ یعنی انتهای رشته
print(("سلام"):match("م$")) -- م
این مبحث بخشی از دوره آموزش کامل لوا است.