i, j = string.find("the number 1298 is even", "%d+")
print(i,j)
在上面的代码,如果我使用%d+
,我得到12,15
预计但%d*
,它返回1,0
。两者之间的唯一区别是*
也接受0值,但+
接受1或更多。但为什么它返回1,0
?使用“*”和“+”在Lua模式
i, j = string.find("the number 1298 is even", "%d+")
print(i,j)
在上面的代码,如果我使用%d+
,我得到12,15
预计但%d*
,它返回1,0
。两者之间的唯一区别是*
也接受0值,但+
接受1或更多。但为什么它返回1,0
?使用“*”和“+”在Lua模式
首先,模式匹配%d+
一个或多个数字,%d*
匹配零个或多个数字,所以在你的榜样,%d+
比赛"1298"
,而%d*
在开始一个空字符串相匹配。零位发生的位数可以通过%d*
来匹配,这就是+
和*
之间的差异。
二,索引1
和0
对于空字符串看起来有点奇怪,但它有道理。索引1
表示字符串的开始,但对于空字符串的结束索引,不能有1
,因为这意味着匹配是第一个字符"t"
,所以它必须小于开始索引,0
是你得到了一个。
此外,返回值string.find()
可用作string.sub()
的参数以获取找到的子字符串。在电话string.sub (s, i, j)
中,如果i
大于j
,则返回空字符串。
谢谢余浩,你解决了我对这些指标的怀疑。但是,我仍然无法确定这里的空串是什么意思?为什么当字符串中有一些数字时,%d *会匹配空字符串? –
我明白了我懂了!你的意思是%d *可以匹配当且仅当我从一开始就在这个字符串中有数字。对? –
@Simrankaur没错,你可以试试看。 –
'%d *'匹配字符串的第一个符号前的空字符串。 –
还不清楚,请解释一下? –
'1' =空串的第一个符号的位置,'0' =最后一个符号的位置。如预期的那样,“length =(pos_last_symbol_pos_first_symbol + 1)= 0”。 –