문제

기본 문자열은 다음과 같습니다 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(), 이지만 모든 패턴 일치 기능에 사용될 수 있습니다.

다른 팁

이 경우 여기서 훨씬 더 중요하지 않은 것을 그룹화하는 데 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top