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. %(%(.*?%)%) -- 什么也没做。
2. %(%(.*%)%) -- 删除了第一个OOC消息后的*所有东西*。

然后,我的朋友告诉我,在括号前加上百分号不起作用,我必须使用反斜杠来“转义”括号。

3. \(\(.*\)\) -- 结果输出文件完全为空。
4. (\(\(.*\)\)) -- 与上述情况相同。
5. (\(\(.*?\)\) --由于没有明显的原因,会删除大部分文本。
6. \(\(.*?\)\) -- 只会删除除最后一行以外的所有文本。

简短而明确的问题: 我需要使用什么模式来删除双括号之间的所有文本,并同时删除双括号本身?

点赞
用户646619
用户646619

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

你的模式应该是 %(%(.-%)%)- 类似于 *,可以匹配前面任意数量的字符序列,但是 * 会尽量匹配尽可能多的字符(它是贪婪的),- 则匹配最少的字符数(它是非贪婪的)。它不会过度匹配并匹配额外的双括号。

2014-11-24 15:06:45