이 Lua 패턴에서 괄호는 무엇을 사용하나요?
-
12-12-2019 - |
문제
기본 문자열은 다음과 같습니다 IP: 192.168.0.1
해당 문자열을 string.gmatch 함수(아래 패턴 제외)에 전달하면 다음 결과가 반환됩니다.
무늬: IP: (%d+.%d+.%d+.%d+)
-->192.168.0.1
무늬: IP: %d+.%d+.%d+.%d+
-->IP:192.168.0.1
내 질문은 Lua 패턴 일치 엔진에 대한 괄호의 의미가 무엇인지입니다.왜 첫 번째 패턴에서 괄호를 사용하면 IP:
문자열이 생략되었지만 두 번째 패턴에서는 아니요?
해결책
괄호 안의 내용은 캡처 그룹;괄호 안의 패턴 부분과 일치하는 입력 문자열 부분은 다음에서 캡처되어 반환됩니다. match()
그리고 gmatch()
.패턴에 캡처 그룹이 없으면 전체 문자열이 반환됩니다.
local x, y, z = ("123456"):match("(%d)%d(%d)%d(%d)%d")
print(x, y, z)
-- 1, 3, 5
연결된 캡처 그룹이 지정된 후 언제든지 %1
, %2
등.캡처된 값에 액세스하는 데 사용될 수 있습니다.
local x, y = ("123123123"):match("(%d%d%d)%1(%1)")
print(x, y)
-- 123, 123
이는 세 번째 매개변수에서 가장 자주 나타납니다. string.gsub()
, 이지만 모든 패턴 일치 기능에 사용될 수 있습니다.
다른 팁
이 경우 여기서 훨씬 더 중요하지 않은 것을 그룹화하는 데 사용해야합니다.
제휴하지 않습니다 StackOverflow