عبارات با الگو (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("م$"))    -- م

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط