我读了一个文件:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
output:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
是的,日志文件看起来很糟糕,因为它充满了各种命令
我怎样才能打电话gsub
并删除即"(\.)\n(\w)", r"\1 \2"
来自数据变量的行?
下面的代码片段不起作用:
s='"(\.)\n(\w)", r"\1 \2"'
data=data:gsub(s, '')
我想需要做一些逃避。有什么简单的解决办法吗?
Update:
local data = [["(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S]]
local s = [["(\.)\n(\w)", r"\1 \2"]]
local function esc(x)
return (x:gsub('%%', '%%%%')
:gsub('^%^', '%%^')
:gsub('%$$', '%%$')
:gsub('%(', '%%(')
:gsub('%)', '%%)')
:gsub('%.', '%%.')
:gsub('%[', '%%[')
:gsub('%]', '%%]')
:gsub('%*', '%%*')
:gsub('%+', '%%+')
:gsub('%-', '%%-')
:gsub('%?', '%%?'))
end
print(data:gsub(esc(s), ''))
这似乎工作正常,只是我需要转义,转义字符%
,因为如果%
位于匹配的字符串中。我试过:gsub('%%', '%%%%')
or :gsub('\%', '\%\%')
但它不起作用。
Update 2:
OK, %
如果首先在上面我刚刚更正的“表”中设置,可以通过这种方式转义
:可怕的经历:
Update 3:
逃脱^
and $
正如Lua手册中所述(5.1 http://www.lua.org/manual/5.1/manual.html#5.4.1, 5.2 http://www.lua.org/manual/5.2/manual.html#6.4.1, 5.3 http://www.lua.org/manual/5.3/manual.html#6.4.1)
A caret ^
在模式的开头将匹配锚定在主题字符串的开头。 A$
模式末尾的匹配将匹配锚定在主题字符串的末尾。在其他岗位上,^
and $
没有特殊意义,只代表自己。
所以更好的主意是逃跑^
and $
仅当(分别)找到它们以及字符串的开头或结尾时。
Lua 5.1 - 5.2+ 不兼容性
string.gsub
现在如果替换字符串包含一个错误%
后跟允许的字符以外的字符%
或数字。
没有必要每次都加倍%
在替换字符串中。看lua用户 http://lua-users.org/wiki/LuaFiveTwo.