2011-08-21 4 views
6

이것이 작동하지 않는 이유가 궁금해서이를 해결하는 이유/방법을 알아야합니다. 나는 일부 입력 질문입니다 여부를 감지하기 위해 노력하고있어, 나는 확신 경우 String.match는 내가 필요로 무엇을 해요,하지만 :루아 string.match는 불규칙한 정규 표현식을 사용합니까?

print(string.match("how much wood?", "(how|who|what|where|why|when).*\\?"))

반환 nil을. 나는 성공과 함께 와일드 카드 (.)를 사용했기 때문에 문자열에서 일치하는 것을 찾으려면 pretty sure Lua's string.match uses regular expressions입니다.하지만 어쩌면 모든 역학을 이해하지 못하겠습니까? 루아는 문자열 함수에 특별한 구분자가 필요합니까? 정규 표현식 here을 테스트 했으므로 루아가 정규 표현식을 사용하면 위의 코드가 "how much wood?"을 반환하는 것처럼 보입니다.

루아의 문자열 조작 함수가 정규 표현식을 사용하는 방법에 대한 포괄적 인 정보를 얻을 수있는 훌륭한 참조 자료로 잘못하고있는 것을 나에게 말해 줄 수 있습니까?

답변

11

루아는 정규식을 사용하지 않습니다. 루아는 비슷하게 보이지만 다른 입력과 일치하는 Patterns을 사용합니다.

.* 또한 입력의 마지막 ?을 소비하므로 \\?에서 실패합니다. 물음표는 제외해야합니다. 특수 문자는 %으로 이스케이프됩니다.

"how[^?]*%?" 

Omri Barel이 말했듯이, 대체 연산자는 없습니다. 아마도 문장의 처음에 대체 단어마다 하나씩 여러 개의 패턴을 사용해야 할 것입니다. 또는 표현식과 같은 정규식을 지원하는 라이브러리를 사용할 수도 있습니다.

+0

오, 감사합니다. 나는 패턴이 정규식과 비슷하게 보이기 때문에 나 혼란 스럽다고 생각한다. 그러나 조금씩 다르다. – Uronym

8

manual에 따르면 패턴은 교대를 지원하지 않습니다.

따라서 "how.*"이 작동하는 동안 "(how|what).*"은 그렇지 않습니다.

그리고 물음표가 .*에 의해 삼키는 것에 대해 kapep이 맞습니다.

관련 질문이 있습니다 : Lua pattern matching vs. regular expressions.

관련 문제