逃逸字符串我讀文件:爲GSUB
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"
行數據變量?
以下片斷,不能正常工作:
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:
OK,%
可以逃脫這樣,如果設定第一在上面的 「表」,我只是糾正
:可怕的經歷:
更新3:
逃逸的^
和$
在模式的始甲插入符
^
錨定匹配在對象字符串的開頭。模式結尾處的$
錨定主題字符串結尾的匹配。在其他位置,^
和$
沒有特殊含義並代表他們自己。
所以一個更好的想法是逃避^
和$
只有當他們被發現(分別)和開頭或字符串的結尾。
的Lua 5.1 - 5.2+不兼容性
string.gsub
現在如果替換字符串包含%
接着大於允許%
或數字以外的字符引發錯誤。
沒有必要在替換字符串中每%
加倍。見lua-users。
要在變量中的Lua字符串中轉義「模式」字符,請使用以下函數:https://github.com/lua-nucleo/lua-nucleo/blob/v0.1.0/lua-nucleo/string.lua# L245-L267 – 2012-03-20 21:19:31