为什么("bar"):find("(foo)?bar") 返回 nil?

难道 ("bar"):find("(foo)?bar") 不应该返回 1, 3 吗?

print(("bar"):find("(foo)*bar"))print(("bar"):find("(foo)-bar")) 也无法正常工作。

点赞
用户88888888
用户88888888

你正在从字符串 "bar" 中搜索字符串 "(foo)bar""(foobar",问号 ? 只指向最后一个字符。

如果你想让它指向整个单词,使用 [] 替代: ("bar"):find("[foo]?bar")

2013-01-20 13:08:49
用户335858
用户335858

这是因为 Lua 的模式匹配中的括号(非常不幸地)并不是一个分组结构,只是用来定界捕获组的。例如,当你写一个模式 (foo)?bar,Lua 会将其解释为“匹配 foo?bar,并将 foo 捕获在一个组中”。这里有一个演示链接。不幸的是,你最接近想要的行为是 f?o?o?bar,这当然也会匹配 fbaroobar,产生其他错误的捕获。

本代码

print(("bar"):find("f?o?o?bar"))

返回1, 3

2013-01-20 13:22:15