我读了一个文件:
local logfile = io.open("log.txt", "r")
data = logfile:read("*a")
print(data)
输出:
...
"(\.)\n(\w)", r"\1 \2"
"\n[^\t]", "", x, re.S
...
是的,logfile看起来很糟糕,因为它充满了各种命令
如何调用gsub
并从数据变量中移除ie "(\.)\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 :
好的,%
如果在我刚刚更正的“表格”中首先设置,就可以通过这种方式进行转义
:可怕的经历:
更新3 :
逃离^
和$
模式开头的插入符
^
将匹配固定在主题字符串的开头。模式末尾的$
将匹配锚定在主题字符串的末尾。在其他位置,^
和$
没有特殊含义并代表自己。
因此,更好的想法是仅在找到({分别)它们以及字符串的开头或结尾时才转义^
和$
。
Lua 5.1 - 5.2+不兼容
如果替换字符串包含string.gsub
后跟除了允许的%
或数字之外的字符,
%
现在会引发错误。
替换字符串中的每个%
都不需要加倍。请参阅lua-users。
答案 0 :(得分:6)
为什么不:
local quotepattern = '(['..("%^$().[]*+-?"):gsub("(.)", "%%%1")..'])'
string.quote = function(str)
return str:gsub(quotepattern, "%%%1")
end
逃跑,然后gsub
离开?
答案 1 :(得分:5)
$(function() {
var $radioButtons = $('.radio input[type="radio"]');
$radioButtons.click(function() {
$('.radio input[type="radio"]').not(':checked').parent('label').removeClass('selected');
$(this).closest('label').addClass('selected');
});
});
这并不意味着你可以简单地将
The character `%´ works as an escape for those magic characters. So, '%.' matches a dot; '%%' matches the character `%´ itself. You can use the escape `%´ not only for the magic characters, but also for all other non-alphanumeric characters. When in doubt, play safe and put an escape.
放在每个非字母数字字符的前面并且没问题。这也是将来的证明(在引入新的特殊字符的情况下)。像这样:
%
它在Lua 5.3.2上为我工作(仅进行了基本测试)。不确定它是否适用于旧版本。
答案 2 :(得分:2)
试
line = '"(\.)\n(\w)", r"\1 \2"'
rx = '\"%(%\.%)%\n%(%\w%)\", r\"%\1 %\2\"'
print(string.gsub(line, rx, ""))
使用%转义特殊字符,使用\
转义引号答案 3 :(得分:1)
尝试s=[["(\.)\n(\w)", r"\1 \2"]]
。