2017-09-12 1 views
2

다시 루아 패턴에 대한 도움이 필요합니다. 나는 다음과 같은 문자열이 있다고 가정하자 :루아 패턴 텍스트 분할

<c> block - categorymaterial

decorative 일치해야합니다 - - 다음은 (가 주어진 것을 반환해야 더 <> 블록이없는 경우 cblock

<category>material 일치해야합니다 또는 없음).

저는 공간에 관심이 없기 때문에 트림이 좋을 것입니다.

(<%a>)([^>]+)을 생성했지만 첫 번째 예에서는 <c>block을 반환합니다. 슬프게도 내가 뒤늦은 것이 아닙니다.

+1

시도'<(%a+)>%의의의 * ([^ >] +)' –

답변

5

패턴의 (<%a>) 부분은 꺾쇠 괄호를 포착하여 캡처 된 값으로 나타납니다. %a은 하나의 알파 문자 와만 일치하므로 1 또는 그 이상의 알파 문자와 일치하도록 숫자 뒤에 + 수량 기호를 추가해야합니다.

사용

<(%a+)>%s*([^>]+) 

%s*는 0+ 공백 문자와 일치합니다 그들은 2.

Lua demo 외부 그룹이 될 것입니다 :

local function splitString(text) 
    return string.match(text, "<(%a+)>%s*([^>]+)") 
end 

print(splitString("<c> block"))   -- c block 
print(splitString("<category>material")) -- category material 
print(splitString("decorative"))   -- nil 
+0

여기 사람들은 진정으로 천재입니다. 감사. – user2463506

+0

함수 내에서 전역 변수를 사용하지 마십시오. :) – moteus

+0

@moteus 이제 한 줄짜리 :) –