Помощ за Lua модел (Двойни скоби)

Кодирах програма в Lua, която автоматично форматира 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.

Краткият, категоричен въпрос: Какъв образец трябва да използвам, за да премахна целия текст между двойните скоби и да премахна самите двойни скоби?


person Fiestasheep    schedule 24.11.2014    source източник
comment
Това са регулярни изрази, а не шаблони за проектиране.   -  person Bartek Banachewicz    schedule 24.11.2014


Отговори (1)


Вашият приятел мисли за регулярни изрази. Lua моделите са подобни, но различни. % е правилният екраниращ знак.

Вашият шаблон трябва да бъде %(%(.-%)%). - е подобно на * по това, че съвпада с който и да е номер от предходната последователност, но докато * се опитва да съпостави възможно най-много знаци (това е алчно), - съвпада с възможно най-малкото количество знаци (не е алчно). Няма да прекалява и да съответства на допълнителни двойни затварящи скоби.

person Colonel Thirty Two    schedule 24.11.2014