在Lua模式中使用'*'和'+'

i, j = string.find("the number 1298 is even", "%d+")
print(i,j)

在上面的代码中,如果我使用%d+,我得到的是12,15,这是预期的结果,但使用%d*,则返回1,0。两者之间的唯一区别是*可以接受0值,而+只接受1或更多。但为什么它返回1,0

点赞
用户1009479
用户1009479

首先,%d+ 模式匹配一个或多个数字,%d* 匹配零个或多个数字,所以在你的例子中,%d+ 匹配 "1298",而 %d* 在开头匹配一个空字符串。%d* 可以匹配数字出现的次数为零,这就是 +* 之间的不同之处。

其次,对于空字符串的索引 10 似乎有点奇怪,但它是有道理的。索引 1 表示字符串的开头,但是对于空字符串的结束索引,你不能使用 1,因为它会表示匹配第一个字符 "t",所以它必须小于开始索引,0 就是你得到的索引。

此外,string.find() 的返回值可以用作 string.sub() 的参数,以获取找到的子字符串。在调用 string.sub(s, i, j) 时,如果 i 大于 j,它将返回一个空字符串。

2014-04-06 14:25:39