문법 · Lua · beginner

문자열·패턴: match, gmatch, gsub

Lua 패턴으로 토큰을 뽑고 치환하는 기초.

배우기 · Lua 문법 · 13분 · 4/7 · lua · 문자열

이 트랙 목차 (7)
  1. 1. Lua 기초: 변수·테이블·문자열
  2. 2. Lua 제어·반복·함수
  3. 3. 테이블 깊게: 배열부·해시부·ipairs
  4. 4. 문자열·패턴: match, gmatch, gsub
  5. 5. 에러와 pcall: 실패를 값으로
  6. 6. 모듈과 require 감각
  7. 7. 숫자 for와 인덱스 함정

기본 연산

local s = "hello"
print(#s)            -- 바이트 길이 (ASCII면 글자 수)
print(s:sub(1, 2))   -- "he" (1-based)
print(s:reverse())

유니코드 한글은 바이트 길이와 글자 수가 다릅니다. 이 사이트 문제는 대체로 ASCII/숫자 위주입니다.

match / gmatch

local a, b = ("3 5"):match("(%S+)%s+(%S+)")
for word in ("a b c"):gmatch("%S+") do
  -- word
end

%가 클래스 이스케이프입니다. .는 임의 한 글자, %d는 숫자입니다.
PCRE 전체를 기대하지 마세요. Lua 패턴은 별개입니다.

gsub

local out = ("a-b-c"):gsub("-", "")
local n = select(2, ("aba"):gsub("a", "x")) -- 치환 횟수

함정

연습

lua-reverse / lua-palindrome처럼 전처리(gsub로 공백 제거) 후 비교하는 흐름을 연습장에서 재현하세요.

자주 쓰는 클래스

패턴의미
%a문자
%d숫자
%s공백
%w알파벳·숫자
%S공백 아님
.임의 1바이트
+ * -반복 (탐욕/비탐욕 차이 있음)

숫자 파싱

local n = tonumber(s)
if not n then return "err" end

match로 뽑은 조각도 tonumber하세요.

한 줄

> Lua 패턴 ≠ 정규식 전체. gmatch로 토큰, gsub로 청소.

관련 짧은 원리

관련 문제