如何在 Lua 中忽略字符串操作的特殊字符?

How to ignore special characters for string manipulation in Lua?

local x = "Mr %gra-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --expecting Mr %gra-b

可悲的是它正在打印 nil。删除特殊字符将使其工作。但是我们希望字符串原样 return。

local x = "Mr %%gra%-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --expecting Mr %gra-b

魔法字符^$()%.[]*+-?需要通过前置%转义!请阅读 Lua manual!

根据评论进行编辑:

Yes, but what if local x is a user input? We have to assume the user does not know magic characters. For example. a filter search of names and words?

文本是在变量中提供还是通过用户输入提供有什么关系。解决办法还是一样。您需要转义魔法字符。

x = x:gsub("%W", "%%%0")

您在任何魔法字符前加上 %。再次,阅读 Lua 手册!

或者使用 Egor 的建议:

y:find(x, 1, true) 第三个参数将抑制模式匹配并简单地搜索提供的字符串。如果您只想检查字符串中是否存在字符串,这可能是最简单的解决方案