【问题标题】:Use of '*' and '+' in Lua patternLua 模式中“*”和“+”的使用
【发布时间】:2014-04-06 22:29:03
【问题描述】:
i, j = string.find("the number 1298 is even", "%d+")
print(i,j)

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

【问题讨论】:

  • %d* 匹配字符串的第一个符号之前的空字符串。
  • 还是不清楚,请解释一下?
  • 1 = 空字符串第一个符号的位置,0 = 最后一个符号的位置。 length = (pos_last_symbol - pos_first_symbol + 1) = 0 符合预期。
  • 但是怎么在这里找到空字符串呢?

标签: string lua lua-patterns


【解决方案1】:

首先,模式%d+ 匹配一个或多个数字,%d* 匹配零个或多个数字,因此在您的示例中,%d+ 匹配 "1298",而%d* 匹配开头的空字符串. %d*可以匹配零出现的数字,这就是+*的区别。

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

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

【讨论】:

  • 谢谢雨浩,你解决了我对索引的疑惑。但是,我仍然无法弄清楚这里的空字符串到底是什么意思?当字符串中有一些数字时,为什么 %d* 会匹配一个空字符串?
  • 我明白了!您的意思是,当且仅当我从一开始就在此字符串中包含数字时, %d* 才会匹配。对吗?
猜你喜欢
  • 2021-05-21
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 2014-05-25
  • 2014-07-04
  • 2011-03-28
相关资源
最近更新 更多