0Pricing
Lua Academy · 강의

string.gsub와 string.gmatch

문자열에서 패턴 일치 항목을 바꾸고 순회합니다.

string.gsub와 string.gmatch은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

string.gsub 기초

string.gsub(s, pattern, repl, n)은 s에서 pattern과 일치하는 부분을 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)은 s에서 pattern과 일치하는 모든 항목을 순회하는 반복자를 반환합니다. 반복자를 호출할 때마다 다음 일치 항목을 반환하며, 패턴에 캡처가 있으면 캡처를 반환합니다. 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 패턴의 특수 문자는 다음과 같습니다: . + * ? [ ] ^ $ % ( ). 이러한 문자를 문자 그대로 일치시키려면 %로 이스케이프하십시오. 이러한 문자가 포함된 일반 문자열을 검색할 때는 string.find의 네 번째 인수로 true를 전달하여 패턴 검색을 끄십시오.

-- 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 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“string.gsub와 string.gmatch”에서 뭘 배우나요?

문자열에서 패턴 일치 항목을 바꾸고 순회합니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“string.gsub와 string.gmatch” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 문자열 기초: 연결과 길이
  2. 부분 문자열 찾기와 추출
  3. 출력을 위한 string.format
  4. string.gsub와 string.gmatch
← Lua Academy(으)로 돌아가기