string.match()
Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 38번째.
string.find()가 문자열에서 패턴이 나타나는 위치를 알려주는 반면, 때로는 일치하는 실제 텍스트를 추출해야 할 때가 있습니다. 이때 string.match()가 사용되며, 캡처(captures)와 결합하면 더욱 강력해집니다.
캡처를 사용하면 추출하려는 패턴의 특정 부분을 표시할 수 있습니다. 패턴의 일부를 괄호 ()로 감싸서 캡처를 생성합니다. string.match()가 일치하는 항목을 찾으면, 단순히 위치를 반환하는 대신 캡처된 텍스트를 반환합니다.
문자열에서 숫자를 추출하는 간단한 예제입니다:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- 출력: 100패턴 %d+는 "하나 이상의 숫자"를 의미합니다. +는 앞선 문자 클래스 중 하나 이상과 일치하는 수식어로, 여러 자리 숫자를 캡처할 수 있게 해줍니다.
캡처를 사용하여 더 복잡한 패턴의 특정 부분을 추출할 수 있습니다:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- 출력: Alice여기서 %a+를 둘러싼 괄호는 Lua에게 "User: " 뒤에 오는 일련의 문자를 캡처하도록 지시합니다. 패턴의 나머지 부분은 올바른 위치를 찾는 데 도움을 주지만, 캡처된 부분만 반환됩니다.
패턴에 여러 개의 캡처가 있는 경우, string.match()는 이들을 모두 별개의 값으로 반환하며, 이를 한 번에 여러 변수에 할당할 수 있습니다.
챌린지
쉬움text를 인자로 받아 문자열에서 찾은 가격 값을 반환하는 extractPrice 함수를 작성하세요.
달러 기호 뒤에 나오는 숫자 가격을 추출하기 위해 캡처 패턴과 함께 string.match()를 사용하세요. 패턴은 %d+를 사용하여 하나 이상의 숫자를 캡처해야 합니다.
매개변수:
text(string): "Price: $XX" 형식의 가격을 포함하는 문자열
반환값: 문자열 형태의 숫자 가격 (string)
치트 시트
string.match()를 사용하여 패턴과 일치하는 텍스트를 추출합니다:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- 출력: 100+ 수식어는 앞에 오는 문자 클래스와 하나 이상 일치하는 항목을 찾습니다:
%d+ -- 하나 이상의 숫자
%a+ -- 하나 이상의 문자괄호 ()를 사용하여 패턴의 특정 부분을 추출하는 캡처를 생성합니다:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- 출력: Alice여러 개의 캡처는 별도의 값을 반환합니다:
local var1, var2 = string.match(text, "(pattern1)(pattern2)")직접 해보기
function extractPrice(text)
-- 여기에 코드를 작성하세요
end
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.