我一直在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.
简短而绝对的问题: 我需要使用哪种模式删除双括号之间的所有文字,并自行删除双括号?
答案 0 :(得分:3)
你的朋友正在考虑正则表达式。 Lua模式类似,但不同。 %
是正确的转义字符。
您的模式应为%(%(.-%)%)
。 -
类似于*
,因为它匹配前面序列中的任意数量,但*
尝试匹配尽可能多的字符(它是贪婪的), -
匹配可能的字符数最少(非贪婪)。它不会超越并匹配额外的双重括号。