3

我想知道这段代码的行为:

str = "abcd"
print( str:find"a(bc)d" )    -- prints 1    4   bc
print( str:find"(ab)cd" )    -- prints 1    4   ab

尽管这两行都在寻找并返回不同的字符串,但它们返回相同的索引,因为它们具有相同的参考框架。换句话说,在计算索引时会忽略捕获,但随后会正常返回。

我最初的问题是关于出了什么问题,但后来我看到手册实际上表明这是正确的行为(虽然不是很清楚)。

问题是我试图根据附近的标记找到一些东西,而没有返回该标记的位置。我希望string.find返回第一次捕获的位置,如果有的话,所以我只是用括号包裹了我想要的位置。显然,这没有帮助。我找到了一个不同的(更好的)解决方案,但我认为这并不总是可行或方便的。

有任何理由string.find这样做吗?对用户有什么特别的好处吗?如果您对 Lua 有绝对的掌握:实际上是否没有导致严重问题的情况?

4

1 回答 1

2

捕获是匹配的副产品。即使你给出了一个有捕获的模式,你仍然对匹配整个模式感兴趣。换句话说,匹配回答了这个问题:这个潜台词出现在给定字符串的什么位置?捕获只是有关比赛的额外信息。

string.find返回匹配的位置,以允许您(例如)在匹配后继续解析字符串,可能使用不同的模式。

于 2014-02-16T23:29:55.880 回答