我正在寻找Lua模式设置中重复符号的数量.我尝试检查字符串中的符号数量.正如我在手册中所读到的,即使使用字符类,这仍然是非常有限的,因为我们只能匹配具有固定长度的字符串.
为了解决这个问题,模式支持这四个重复运算符:
- '*'尽可能多地匹配前一个字符(或类)零次或多次.
- '+'尽可能多次匹配前一个字符(或类)一次或多次.
- ' - '将前一个字符(或类)与零或多次匹配,尽可能少.
- '?' 使前一个字符(或类)可选.
所以,没有关于大括号的信息,{}
例如,
{1,10}; {1,}; {10};
Run Code Online (Sandbox Code Playgroud)
不起作用.
local np = '1'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
Run Code Online (Sandbox Code Playgroud)
回报np = nil.
local np = '1{1}'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
Run Code Online (Sandbox Code Playgroud)
返回np = '1{1}':)
这个网址说没有这样的魔术符号:
某些字符(称为魔术字符)在模式中使用时具有特殊含义.神奇的人物是
Run Code Online (Sandbox Code Playgroud)( ) . % + - * ? [ ^ $
卷曲括号仅作为简单文本工作,不再有效.我对吗?避免这个'错误'的最佳方法是什么?
例如,这里可以阅读大括号的常用用法.
我们不得不承认 Lua 正则表达式量词在功能上非常有限。
+, -,*和?)'(foo)+'或'(foo|bar)'),只能重复或选择单个字符,而不是子模式或字符串。作为“变通方法”,为了使用限制量词和所有其他 PCRE 正则表达式特权,您可以使用rex_pcrelibrary。
或者,正如@moteus 建议的那样,“模拟”只有下界的限制量词的部分解决方法,只需重复模式以匹配它几次并将可用的 Lua 量词应用于最后一个。例如,匹配3 次或更多出现的模式:
local np = 'abc_123'
local a = np:match('^[a-zA-Z0-9_][a-zA-Z0-9_][a-zA-Z0-9_]+$' )
Run Code Online (Sandbox Code Playgroud)
另一个要考虑而不是 PCRE 的库是Lpeg。
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |