【发布时间】:2012-03-20 16:18:14
【问题描述】:
我读了一个文件:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
输出:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
是的,日志文件看起来很糟糕,因为它充满了各种命令
如何调用gsub 并从数据变量中删除即"(\.)\n(\w)", r"\1 \2" 行?
低于sn-p,不起作用:
s='"(\.)\n(\w)", r"\1 \2"'
data=data:gsub(s, '')
我想需要进行一些转义。有什么简单的解决办法吗?
更新:
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('%%', '%%%%') 或:gsub('\%', '\%\%'),但它不起作用。
更新 2:
好的,% 如果首先在我刚刚更正的“表格”中设置,则可以这样转义
:糟糕的经历:
更新 3:
^ 和 $ 的转义
模式开头的插入符号
^将匹配锚定在主题字符串的开头。模式末尾的$将匹配锚定在主题字符串的末尾。在其他位置,^和$没有特殊含义,代表自己。
因此,更好的办法是仅在找到 ^ 和 $ 时(分别)以及字符串的开头或结尾进行转义。
Lua 5.1 - 5.2+ 不兼容
如果替换字符串包含
%后跟允许的%或数字以外的字符,string.gsub现在会引发错误。
不需要将替换字符串中的每个% 都加倍。见lua-users。
【问题讨论】:
-
要在变量中转义 Lua 字符串中的“模式”字符,请使用此函数:github.com/lua-nucleo/lua-nucleo/blob/v0.1.0/lua-nucleo/…