我正在寻找Lua模式设置中符号重复的数量。 我尝试检查字符串中的符号数量。 当我在manual读到时, 即使使用字符类,这仍然是非常有限的,因为我们只能匹配具有固定长度的字符串。
为了解决这个问题,模式支持这四个重复运算符:
- ' *'匹配前一个字符(或类)的次数为零次或多次。
- ' +'匹配前一个字符(或类)一次或多次,尽可能多次。
- ' - '匹配前一个字符(或类)零次或多次,尽可能少。
- ''使前一个字符(或类)可选。
所以,没有关于大括号{}
的信息
如,
{1,10}; {1,}; {10};
不起作用。
local np = '1'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
返回np = nil
。
local np = '1{1}'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
返回np = '1{1}'
:)
这url表示没有这样的魔术符号:
有些字符,称为魔术字符,具有特殊含义 用在一个模式中。
是神奇的角色( ) . % + - * ? [ ^ $
卷曲括号仅作为简单文本工作,不再有效。 我对吗?什么是避免这种错误的最佳方法?
。可以阅读大括号的常用用法,例如here。
答案 0 :(得分:2)
我们不能承认Lua正则表达式量词在功能上非常有限。
+
,-
,*
和?
)'(foo)+'
or '(foo|bar)'
), only single characters can be repeated or chosen between, not sub-patterns or strings. 作为"解决方法",为了使用限制量词和所有其他PCRE正则表达式特权,您可以使用rex_pcre
library。
或者,正如@moteus建议的那样,部分解决方法是来模仿"限制具有下限的量词,只需重复模式以匹配它几次,并将可用的Lua量词应用于最后一个。例如。匹配模式的 3次或更多次:
local np = 'abc_123'
local a = np:match('^[a-zA-Z0-9_][a-zA-Z0-9_][a-zA-Z0-9_]+$' )
请参阅IDEONE demo
要考虑的另一个库而不是PCRE是Lpeg。