2011-06-13 5 views
2

저는 현재 웹 사이트에서 정보를 수집하는 스크립트 작업을하고 있습니다. 경우 String.match이 같은 정규식 패턴 매칭을 받아 들일 수있을 것인지 궁금하네요 다음string.match 및 regex가 가능합니까?

string.match(page, "(?:(Phrase One|Phrase Two|Phrase Three|...))") 

문제는 그것을 할 수 있다면 나도 몰라,하지만 나는 기꺼이 해결책을 찾으십시오. 감사!

+0

당신이 gmatch와 패턴을 분석 래퍼를 만들 수있는 것 같아요. 라이브러리가 허용되면 [LPEG] (http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html)도 사용할 수 있습니다 – jpjacobs

+0

정규 표현식을 루아 표준 라이브러리에 포함하지 않은 이유는 풀 정규 표현 엔진이 전체 루아 언어보다 큽니다. 따라서 루아에서 직접 구현하거나, 포함하고있는 프로그램에 의해 전달 된 (그리고 루아에 제공되는) C 라이브러리를 사용해야한다. –

+0

Jane의 솔루션을 사용하여 상처를 입었습니다. 완벽하게 작동합니다. 내 요구 사항에 맞게 수정해야했지만 그 일을합니다. 감사! – Josh

답변

3

패턴으로 테이블을 가져온 다음 일치하는 테이블을 반환하는 함수를 정의하거나 텍스트가 페이지에 포함되어 있는지 알아야만 다음 함수가 작동하는지 정의해야합니다.

function FindAny(strContent,tblPatterns) 
    bReturn = false 
    for i,strPattern in ipairs(tblPatterns) do 
     if (string.find(strContent,strPattern) ~= nil) then 
      bReturn = true 
      break 
     end 
    end 
    return bReturn 
end 
if FindAny('pattern 4',{'pattern 1','pattern 2','pattern 3','pattern 4'}) then 
    print('Pattern Found') 
end 
0

http://lua-users.org/wiki/StringLibraryTutorial까지는 gsub 방법을 나타냅니다.

+0

여러 매개 변수를 허용하는 곳이 어디인지 알 수 없으므로 필요한 것은 15-20 가지 가능한 출력에 대해 'if then else'문을 사용하지 않는 것입니다. \ – Josh

3

완전한 표현식이 필요하면 Lrexlib을 사용할 수 있습니다.

+0

내가 사용하는 프로그램 (CMUD, 다중 사용자 지하 감옥에 사용됨)과 호환되는 것 같습니다. 그것은 부끄러운 일입니다, 왜냐하면 저는 확실히 이것으로 많은 것을 할 수 있었지만, 분명히 루아 라이브러리의 기초만을 사용했을 것입니다. 뭔가를 놓치지 않는 한. – Josh

+0

아, 당신은 임베디드 루아를 말하지 않았습니다. – sylvanaar

+0

실제로, 나는 지금 막 프로그램 및 루아에 대해 무언가를 배웠고, 그것은 "요구 사항"의 사용법이었습니다. 이제는 제대로 작동시키는 법을 알아야합니다. : P – Josh

2

루아에는 정규 표현식이 내장되어 있지 않지만이를위한 몇 가지 추가 모듈이 있습니다. 여기에 하나 : http://www.inf.puc-rio.br/~roberto/lpeg/re.html

gmatch()는 설명하는 문제에 사용할 수 있습니다. 정규식과는 다른 구문입니다. 여기에 대한 설명은 다음과 같습니다

http://lua-users.org/wiki/StringLibraryTutorial

http://www.wowpedia.org/Pattern_matching

+0

내가 완전히 눈을 멀게하지 않으면, 나는 심지어 내가 심지어 심지어 gmatch로 여러 매개 변수를 어떻게 할 수 있는지 보지 못한다. 아마도 "Results"나 "Decimal approximation"등과 같이 문구가 모두 다르다는 것을 지적 했어야합니다. 이것이 내 잘못 일 것입니다. – Josh

+0

오, 난 당신이 정규식에 여러 매개 변수를 가지고 통지하지 않았다. 이 경우 @jane이 제안하는 것을 할 것입니다. 모든 매개 변수를 테이블에 넣은 다음 해당 테이블을 반복합니다. – jhocking

관련 문제