2015-11-13 51 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