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

String 如何在Lua中忽略字符串操作的特殊字符?,string,lua,pattern-matching,matching,string-matching,String,Lua,Pattern Matching,Matching,String Matching,很遗憾,它印的是零。删除特殊字符将使其正常工作。但我们希望字符串按原样返回 local x = "Mr %gra-b" local y = "Mr %gra-b is your master-!" y = y:match(x) print(y) --expecting Mr %gra-b 魔法字符^$()%.[]*+-?需要通过在%前面加前缀进行转义!请仔细阅读 因评论而编辑: 是的,但是如果本地x是用户输入呢?我们必须假设用户 不知道魔法人物。例如名称

很遗憾,它印的是零。删除特殊字符将使其正常工作。但我们希望字符串按原样返回

local x = "Mr %gra-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --expecting Mr %gra-b
魔法字符
^$()%.[]*+-?
需要通过在
%
前面加前缀进行转义!请仔细阅读

因评论而编辑:
是的,但是如果本地x是用户输入呢?我们必须假设用户 不知道魔法人物。例如名称的筛选搜索 语言呢

如果文本是在变量中提供的,或者是通过用户输入提供的,那又有什么关系呢。解决方案仍然是一样的。你需要避开魔法角色

local x = "Mr %%gra%-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --expecting Mr %gra-b
您可以将
%
前置到任何魔法角色。再次阅读Lua手册

或者使用Egor的建议:


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

是,但是如果本地x是用户输入怎么办?我们必须假设用户不知道魔法字符。例如名称和单词的筛选搜索?@KujoLudin请参见编辑
如果y:find(x,1,true),然后打印(“x在y内找到”)结束
x = x:gsub("[%^%$%(%)%%%.%[%]%*%+%-%?]", "%%%0")