2015-11-13 129 views
2

此主题已部分由其他用户在线程处理: Lua string.gsub with Multiple Patterns的Lua:string.gsub模式(S),允许多模式替换

我有问题,我相信这是我的模式(第二)的论点。这里是我的gsub代码我想使用的例子:

local dateCode = "MMM/dd-YYYY:ss" 

--dateCode = dateCode:gsub(".*", {["%/"] = "s", ["%-"] = "n", ["%:"] = "c"}) --original code but removed after @Etan's comments. 
dateCode = dateCode:gsub(".*", {["/"] = "s", ["-"] = "n", [":"] = "c"}) 

print(dateCode) 

MMM/dd-YYYY:ss --printed 

MMMsddnYYYYcss --desired 

我认为我不应该看在所有的字符,如我现在有,但我不知道我应该什么花样用于变量dateCode。 这个想法是用它开始的第一个字符替换这些键。

+0

这里您的期望输出是什么? 'MMMsddnYYYYcss'? 'gsub'替换中的键需要等于模式匹配的字符串的捕获位。您的输入中没有'%',因此您的任何键都不可能匹配。 –

+0

@EtanReisner你是对的。这是所需的输出。我错误地使用'%'作为转义字符在我的键中。谢谢。一旦删除,仍然不会提供所需的结果。 – Pwrcdr87

+0

想想你与你的模式匹配。比赛的“结果”是什么? *这是* gsub在表格参数中查找的内容。所以如果你想替换那些角色,那么你需要单独匹配*这些角色。 –

回答

3

既然你要选择的字符集为内容替换,把它们设定为图案的字符:

dateCode = dateCode:gsub("[/:-]", {["/"] = "s", ["-"] = "n", [":"] = "c"}) 

目前地方发生的事情是,与图案.*,它匹配整个字符串。由于字符串"MMM/dd-YYYY:ss"在散列表(第二个参数)中没有索引值,实际上不会发生替换。

+0

感谢hjpotter。我使用了下面的'dateCode:gsub(“%p”,{[“/”] =“s”,[“ - ”] =“n”,[“:”] =“c”})' 。按照您刚发布的方式进行操作会产生什么后果?啊......我得到你的解释!谢谢。 – Pwrcdr87

+1

'%p'包含更多字符。它还会包含诸如'+','!'等字符,虽然对性能(或输出)没有影响,但我建议在'gsub'模式中使用更难的限制。如果你确定你想要什么,那就特别使用它。 – hjpotter92

+0

真棒信息。谢谢你! – Pwrcdr87