Lua模式设置中符号重复的数量

时间:2015-10-01 09:31:43

标签: lua lua-patterns

我正在寻找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

1 个答案:

答案 0 :(得分:2)

我们不能承认Lua正则表达式量词在功能上非常有限。

  1. 他们就是你提到的那4个(+-*?
  2. 无限制量词支持(您需要的那些)
  3. 与其他系统不同,在Lua中,修饰符只能应用于字符类;无法在修饰符下对模式进行分组(请参阅source)。 Unfortunately Lua patterns do not support this ('(foo)+' or '(foo|bar)'), only single characters can be repeated or chosen between, not sub-patterns or strings.
  4. 作为"解决方法",为了使用限制量词和所有其他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