2014-11-24 3 views
2

Я кодировал программу в Lua, которая автоматически форматирует журналы IRC из ролевой игры. В журналах ролевых игр существует конкретная рекомендация для разговора «Вне характера», для которой мы используем двойные круглые скобки. Например: ((<Things unrelated to roleplay go here>)). Я пытался, чтобы моя программа удаляла текст между двойными скобками (и включала обе скобки). Код:Lua pattern help (Двойные скобки)

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

Вы знакомы с регулярными выражениями. Модели Lua похожи, но разные. % - правильный символ возврата.

Ваш шаблон должен быть %(%(.-%)%). - похож на * тем, что он соответствует любому номеру предыдущей последовательности, но в то время как * пытается совместить столько символов, сколько может (это жадный), - соответствует наименьшему количеству символов (это не жадный). Он не перейдет за борт и не скопирует дополнительную двойную скобку.

 Смежные вопросы

  • Нет связанных вопросов^_^