2014-04-06 46 views
2
i, j = string.find("the number 1298 is even", "%d+") 
print(i,j) 

在上面的代码,如果我使用%d+,我得到12,15预计但%d*,它返回1,0。两者之间的唯一区别是*也接受0值,但+接受1或更多。但为什么它返回1,0使用“*”和“+”在Lua模式

+1

'%d *'匹配字符串的第一个符号前的空字符串。 –

+0

还不清楚,请解释一下? –

+0

'1' =空串的第一个符号的位置,'0' =最后一个符号的位置。如预期的那样,“length =(pos_last_symbol_pos_first_symbol + 1)= 0”。 –

回答

1

首先,模式匹配%d+一个或多个数字,%d*匹配零个或多个数字,所以在你的榜样,%d+比赛"1298",而%d*在开始一个空字符串相匹配。零位发生的位数可以通过%d*来匹配,这就是+*之间的差异。

二,索引10对于空字符串看起来有点奇怪,但它有道理。索引1表示字符串的开始,但对于空字符串的结束索引,不能有1,因为这意味着匹配是第一个字符"t",所以它必须小于开始索引,0是你得到了一个。

此外,返回值string.find()可用作string.sub()的参数以获取找到的子字符串。在电话string.sub (s, i, j)中,如果i大于j,则返回空字符串。

+0

谢谢余浩,你解决了我对这些指标的怀疑。但是,我仍然无法确定这里的空串是什么意思?为什么当字符串中有一些数字时,%d *会匹配空字符串? –

+0

我明白了我懂了!你的意思是%d *可以匹配当且仅当我从一开始就在这个字符串中有数字。对? –

+1

@Simrankaur没错,你可以试试看。 –