我想在同一个字符串" (55)"
模式1 "[^%w_](%d+)"
,应匹配任何数字
模式2 "[%(|%)|%%|%+|%=|%-|%{%|%}|%,|%:|%*|%^]"
应与这些( ) % + = - { } , : * ^
个字符匹配。
这两种模式都返回2,为什么?此外,如果我运行字符串匹配,则会分别返回(
和55
(如预期的那样)。
答案 0 :(得分:0)
您似乎正在使用string.find
的模式,找到传递的字符串中第一次出现的模式。如果找到模式的实例,则返回表示字符串的开头和结尾的一对值。如果找不到模式,则返回nil
。
两种模式在第2位找到匹配:[^%w_](%d+)
找到(
,因为它与[^%w_]
匹配(除了字母,数字或{之外的字符) {1}}),_
与[%(|%)|%%|%+|%=|%-|%{%|%}|%,|%:|%*|%^]
匹配,因为它是字符集的一部分。
但是,第一个模式可以使用 frontier 模式(
重写,如果没有字母,数字或下划线,则匹配1+位数,第二个模式匹配模式不需要这么大的转义,%f[%w_]%d+
就足够了(只有[()%%+={},:*^-]
需要在这里转义,因为%
放在字符集的末尾,因此被视为一个字面连字符)。
请参阅此Lua demo:
-