2014-11-24 3 views
2

저는 롤아에서 자동으로 IRC 로그를 포맷하는 프로그램을 코딩했습니다. 롤 플레이 로그에는 이중 괄호를 사용하는 "문자 부족"대화에 대한 특정 지침이 있습니다. 예 : ((<Things unrelated to roleplay go here>)). 내 프로그램에서 이중 대괄호 (및 양쪽 대괄호 포함) 사이의 텍스트를 제거하도록 노력했습니다. 코드는 다음과 같습니다 여기루아 패턴 도움말 (이중 괄호)

ofile = io.open("Output.txt", "w") 
rfile = io.open("Input.txt", "r") 
p = rfile:read("*all") 
w = string.gsub(p, "%(%(.*?%)%)", "") 
ofile:write(w) 

패턴이> 나는 패턴의 다양한 변화를 시도했습니다 "%(%(.*?%)%)"입니다. 모든 열매를 맺지 결과 결과 :

1. %(%(.*?%)%) --Wouldn't do anything. 
2. %(%(.*%)%) --Would remove *everything* after the first OOC message. 

그런 다음, 내 친구가 백분율로 브라켓을 붙이는 것은 작동하지 않을 것이라고 나에게 말했다, 나는 '탈출'괄호에 백 슬래시를 사용했다는 것을.

3. \(\(.*\)\) --resulted in the output file being completely empty. 
4. (\(\(.*\)\)) --Same result as above. 
5. (\(\(.*?\)\) --would for some reason, remove large parts of the text for no apparent reason. 
6. \(\(.*?\)\) --would just remove all the text except for the last line. 

짧은, 절대 질문 : 나는 이중 괄호 사이의 모든 텍스트를 제거하고, 너무 이중 괄호 자신을 제거하는 데 사용할 필요가 무엇 패턴 ?

+0

이들은 정규 표현식이며 디자인 패턴이 아닙니다. –

답변

3

당신은 친구가 정규 표현식을 생각하고 있습니다. 루아 패턴은 비슷하지만 다르다. %은 올바른 이스케이프 문자입니다.

귀하의 패턴은 %(%(.-%)%)이어야합니다. -*과 비슷하지만 임의의 수의 앞의 시퀀스와 일치하지만 *은 가능한 한 많은 문자를 검색하려고합니다 (욕심이 많음) -은 가능한 최소 문자 수와 일치합니다 (욕심이 없습니다). 그것은 배 밖으로 이동하지 않으며 여분의 이중 닫기 괄호와 일치하지 않습니다.