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

时间:2013-01-20 13:04:35

标签: lua lua-patterns

不应("bar"):find("(foo)?bar")返回1, 3

print(("bar"):find("(foo)*bar"))print(("bar"):find("(foo)-bar"))也不起作用。

2 个答案:

答案 0 :(得分:5)

这是因为Lua模式中的括号(非常不幸)不作为分组构造,仅作为捕获组的分隔符。当您编写模式(foo)?bar时,Lua会将其解释为“匹配foo?b,{{1 }},a,捕获组中的r“。这是一个link to a demo。不幸的是,您最接近所需行为的是foo,当然也会匹配f?o?o?barfbar以及其他错误的捕获。

此代码

oobar

returns 1 3

答案 1 :(得分:0)

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

如果您希望它指向整个单词,请改用[]("bar"):find("[foo]?bar")