为什么这会返回相同的索引?

时间:2017-01-08 10:59:55

标签: lua lua-patterns

我想在同一个字符串" (55)"

上运行两个不同的lua字符串find

模式1 "[^%w_](%d+)",应匹配任何数字

模式2 "[%(|%)|%%|%+|%=|%-|%{%|%}|%,|%:|%*|%^]"应与这些( ) % + = - { } , : * ^个字符匹配。

这两种模式都返回2,为什么?此外,如果我运行字符串匹配,则会分别返回(55(如预期的那样)。

1 个答案:

答案 0 :(得分:0)

您似乎正在使用string.find的模式,找到传递的字符串中第一次出现的模式。如果找到模式的实例,则返回表示字符串的开头和结尾的一对值。如果找不到模式,则返回nil

两种模式在第2位找到匹配[^%w_](%d+)找到(,因为它与[^%w_]匹配(除了字母,数字或{之外的字符) {1}}),_[%(|%)|%%|%+|%=|%-|%{%|%}|%,|%:|%*|%^]匹配,因为它是字符集的一部分。

但是,第一个模式可以使用 frontier 模式(重写,如果没有字母,数字或下划线,则匹配1+位数,第二个模式匹配模式不需要这么大的转义,%f[%w_]%d+就足够了(只有[()%%+={},:*^-]需要在这里转义,因为%放在字符集的末尾,因此被视为一个字面连字符)。

请参阅此Lua demo

-