2016-08-02 80 views
2

我想知道如果任一/ Lua中這兩種兩種情況是可能的:先進的Lua模式匹配

我有一個字符串,它看起來像這樣:some_value=averylongintegervalue

說我也知道恰好有21 =登錄字符串後的字符,是否有一種簡短的方法來替換我自己的字符串averylongintegervalue? (即比打字更簡單的方法:string.gsub("some_value=averylongintegervalue", "some_value=.....................", "some_value=anewintegervalue")

說我們編輯原始的字符串看起來像這樣:some_value=averylongintegervalue&

假設我們不知道有多少個字符是=符號後,有沒有辦法來取代在之間some_value=&

我知道這是一個奇怪的具體問題,但我經常發現自己需要執行使用正則表達式類似的任務,想知道是怎麼回事就在Lua進行使用模式匹配的字符串。

回答

3

是的,你可以使用類似以下(%1是指在圖案的第一捕獲,在這種情況下捕捉some_value=):

local str = ("some_value=averylongintegervalue"):gsub("(some_value=)[^&]+", "%1replaced") 

這應該分配some_value=replaced

你知道,如果它也有可能反覆單個字符(如*符號21倍,而不是常量字符串等取代重複)替換=和&之間的每一個人物?

是的,但你需要使用的功能:

local str = ("some_value=averylongintegervalue") 
    :gsub("(some_value=)([^&]+)", function(a,b) return a..("#"):rep(#b) end) 

這將分配some_value=#####################。如果您需要將其限制爲只有一個替代品,請將,1作爲最後一個參數添加到gsub中(如Wiktor在評論中所建議的那樣)。

+0

我認爲它是可以的,但它看起來應該有一個替換在這裏,所以限制參數'1'可以傳遞給'gsub'。 –

+0

哦,這是完美的,謝謝!你知道是否有可能用單個重複的字符替代'='和'&'之間的每個字符(例如*號重複21次而不是像'replaced'這樣的常量字符串)? – kshah

+0

是的,這是可能的;我更新了答案。 –