在 Lua 中如何忽略字符串处理中的特殊字符?

local x = "Mr %gra-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --期望结果为 Mr %gra-b

遗憾地打印出了 nil。移除特殊字符将使其正常工作,但我们希望字符串返回它原有的样子。

点赞
用户2858170
用户2858170
local x = "Mr %%gra%-b"
local y = "Mr %gra-b is your master-!"
y = y:match(x)
print(y) --期望输出 Mr %gra-b

魔术字符 ^$()%.[]*+-? 需要以 % 开头进行转义!请阅读 Lua 手册

由于评论的编辑:

是的,但如果 local x 是用户输入呢?我们必须假设用户不知道魔术字符。例如,名称和单词的过滤搜索?

文本是否是在变量中提供或通过用户输入提供都没有关系。解决方案仍然是一样的。您需要转义魔术字符。

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

您在任何魔术字符前面添加 %。再次阅读 Lua 手册!

或者使用 Egor 的建议:

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

2021-06-10 11:37:04