如何在lua中使用string.find查找方括号字符?

13

我正在尝试在字符串中查找方括号:

s = "testing [something] something else"
x,y = string.find(s,"[")

我执行时遇到了错误:malformed pattern (missing ']').

我还尝试了以下代码:

x,y = string.find(s,"\[")

给我相同的错误。

还有这个:

x,y = string.find(s,"\\[")

在这种情况下,x和y都是nil。

有没有关于如何正确处理的想法?提前感谢。

2个回答

21

约翰的答案可行 - 关闭模式匹配。

你正在尝试的操作 - 转义 [ - 可以用Lua中的%字符完成:

 x,y = string.find(s,'%[')

在Lua中,所有的字符串都有string模块作为它们的元表。因此,你可以这样说:

 x,y = s:find('%[')

甚至更多:

 x,y = s:find'%['

8
使用 string.find 的第四个参数,可以关闭模式匹配。
x, y = string.find(s, "[", nil, true)

可以,很好用,谢谢。 但是我现在想做的是找到这个模式: "[..:..]" 它的意思是:一个括号,两个'.'表示任何字符,接着是':',再次是2个'.',最后是另一个括号。 我应该将问题分成2个或更多的string.find吗?谢谢。 - Marcelo Machado
Oh Mud回答说:只需使用“%[”,现在我可以使用“。”作为通配符。再次感谢。 - Marcelo Machado
1
好的,那么请使用Mud的答案。您可以使用“%”符号转义字符,例如“[`”,因此您可以使用“%[..:..%]”模式。 - John Calsbeek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接