2011-07-15 27 views
2

有沒有辦法在Lua中轉義整個變量?如:如何在Lua中轉義變量

local blah = some_pattern 
string.gsub(blah, "-", "%-") 

變量「等等」更改,並在其他模式匹配中使用。每當「嗒嗒」中有一個魔法字符,第二個模式匹配,即在別處完成,失敗。

所以我需要處理至少逃避各種魔法字符,在「等等」。

在此先感謝!

回答

3

這裏有點不清楚你在這裏要求什麼:一個方法來調用你的轉義函數,每當一個變量的值被設置,或者如何轉義字符串模式匹配。

變量只是一個值的存儲。設置局部變量時不會導致一般操作發生。因此,如果您更改blah的值,則需要您再次正確地轉義字符串。

如果你問如何逃生模式匹配的字符串,它會是這樣的:

blah = blah:gsub(blah, "([...])", "%%%1") 

哪裏...是,你需要轉義字符的列表。 Lua參考手冊有一個您可以使用的列表。請注意,由於這是一種模式,因此這些字符必須在處轉義。

7

最簡單的方法是逃避所有的標點字符,而不是擔心魔法人物:

newpattern = string.gsub(pattern, "%p", "%%%1") 
+0

難道不該' 「%%% 0」' ? –

+1

'%1'工作正常。 – lhf

2

使用this function

local escape_lua_pattern 
do 
    local matches = 
    { 
    ["^"] = "%^"; 
    ["$"] = "%$"; 
    ["("] = "%("; 
    [")"] = "%)"; 
    ["%"] = "%%"; 
    ["."] = "%."; 
    ["["] = "%["; 
    ["]"] = "%]"; 
    ["*"] = "%*"; 
    ["+"] = "%+"; 
    ["-"] = "%-"; 
    ["?"] = "%?"; 
    } 

    escape_lua_pattern = function(s) 
    return (s:gsub(".", matches)) 
    end 
end