Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
不应该("bar"):find("(foo)?bar")回来1, 3吗?
("bar"):find("(foo)?bar")
1, 3
print(("bar"):find("(foo)*bar"))也print(("bar"):find("(foo)-bar"))不会工作。
print(("bar"):find("(foo)*bar"))
print(("bar"):find("(foo)-bar"))
这是因为 Lua 模式中的括号(很不幸)不能用作分组结构,只能用作捕获组的分隔符。当你写一个 pattern(foo)?bar时,Lua 将它解释为“match f, o, o, ?, , b, a, r, capture fooin a group”。这是一个演示的链接。不幸的是,您可以获得的最接近您想要的行为的是f?o?o?bar,这当然也可以匹配fbar和oobar,以及其他错误捕获。
(foo)?bar
f
o
?
b
a
r
foo
f?o?o?bar
fbar
oobar
这段代码
print(("bar"):find("f?o?o?bar"))
返回 1 3
您正在搜索 string"(foo)bar"或"(foobar"from string "bar",问号?仅指向最后一个字符。
"(foo)bar"
"(foobar"
"bar"
如果您希望它指向整个单词,请[]改用:("bar"):find("[foo]?bar")
[]
("bar"):find("[foo]?bar")