레슨 6 / 8·3개 토픽
문자열 처리와 패턴 매칭
문자열 기본 함수
Lua의 string 라이브러리는 문자열 조작에 필요한 다양한 함수를 제공합니다. 문자열은 불변(immutable)이므로 변환 함수는 항상 새 문자열을 반환합니다.
lua
local s = "Hello, Lua World!"
-- 길이, 대소문자
print(#s) -- 17
print(string.upper(s)) -- "HELLO, LUA WORLD!"
print(string.lower(s)) -- "hello, lua world!"
-- 부분 문자열
print(string.sub(s, 1, 5)) -- "Hello"
print(string.sub(s, 8)) -- "Lua World!"
print(string.sub(s, -6)) -- "orld!"
-- 반복, 뒤집기
print(string.rep("Lua ", 3)) -- "Lua Lua Lua "
print(string.reverse("abcde")) -- "edcba"
-- 문자열 포맷 (printf 스타일)
local name = "세계"
local year = 2024
print(string.format("안녕, %s! %d년입니다.", name, year))
-- "안녕, 세계! 2024년입니다."
-- 바이트 변환
print(string.byte("A")) -- 65
print(string.char(65, 66, 67)) -- "ABC"Lua 패턴 매칭
Lua는 정규표현식 대신 자체 패턴 문법을 사용합니다. 정규식보다 가볍지만 대부분의 텍스트 처리에 충분합니다. %가 이스케이프 문자로 사용됩니다.
lua
-- string.find: 패턴 찾기
local s = "오늘 날짜는 2024-03-15 입니다"
local start, finish = string.find(s, "%d+-%d+-%d+")
print(start, finish) -- 패턴이 시작/끝 위치
-- string.match: 매칭된 값 추출
local date = string.match(s, "(%d+)-(%d+)-(%d+)")
print(date) -- "2024" (첫 캡처)
local year, month, day = string.match(s, "(%d+)-(%d+)-(%d+)")
print(year, month, day) -- "2024" "03" "15"
-- string.gmatch: 반복 매칭 (이터레이터)
local text = "사과 3개, 바나나 5개, 포도 12개"
for item, count in string.gmatch(text, "(%a+)%s+(%d+)개") do
print(item .. ": " .. count)
end
-- 사과: 3
-- 바나나: 5
-- 포도: 12string.gsub과 패턴 클래스
lua
-- string.gsub: 패턴 치환
local s = "Hello World 123"
print(string.gsub(s, "%d+", "NUM")) -- "Hello World NUM"
print(string.gsub(s, "%u", "*")) -- "*ello *orld 123"
-- 함수를 이용한 치환
local result = string.gsub("price: $100, tax: $15", "%$(%d+)",
function(n)
return "$" .. tostring(tonumber(n) * 1.1)
end
)
print(result) -- "price: $110.0, tax: $16.5"
-- 주요 패턴 클래스
-- %a 문자(알파벳) %A 문자가 아닌 것
-- %d 숫자 %D 숫자가 아닌 것
-- %w 알파벳+숫자 %W 알파벳+숫자가 아닌 것
-- %s 공백 %S 공백이 아닌 것
-- %p 구두점 %l 소문자 %u 대문자
-- . 아무 문자 % 이스케이프
-- * 0회 이상 + 1회 이상
-- - 0회 이상(최소) ? 0 또는 1회- •
string.find(s, pattern)— 패턴 위치 찾기 (start, end 반환) - •
string.match(s, pattern)— 패턴 매칭 결과 반환 - •
string.gmatch(s, pattern)— 반복 매칭 이터레이터 - •
string.gsub(s, pattern, repl)— 패턴 치환 - •
string.format(fmt, ...)— printf 스타일 포맷팅 - •
%d,%a,%w,%s— 패턴 클래스 (대문자는 반대)
💡
Lua 패턴에서 특수문자(., %, ( 등)를 리터럴로 매칭하려면 %로 이스케이프하세요. 예: %.은 실제 점을 매칭합니다.