Lua模式帮助(双括号)

时间:2014-11-24 14:49:56

标签: lua lua-patterns

我一直在Lua中编写一个程序,可以自动格式化角色扮演中的IRC日志。在角色扮演日志中,有一个特定的指导方针,用于&#34;超出角色&#34;对话,我们使用双括号。例如:((<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)

这里的模式是&gt; "%(%(.*?%)%)"我尝试了多种模式变体。所有结果都没有结果:

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

然后,我的朋友告诉我,在百分比前面加上括号是行不通的,而且我不得不使用反斜杠来逃避&#39;括号。

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.

简短而绝对的问题: 我需要使用哪种模式删除双括号之间的所有文字,并自行删除双括号?

1 个答案:

答案 0 :(得分:3)

你的朋友正在考虑正则表达式。 Lua模式类似,但不同。 %是正确的转义字符。

您的模式应为%(%(.-%)%)-类似于*,因为它匹配前面序列中的任意数量,但*尝试匹配尽可能多的字符(它是贪婪的), -匹配可能的字符数最少(非贪婪)。它不会超越并匹配额外的双重括号。