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

我正在寻找 Lua 模式设置中符号重复的数量。我试图检查字符串中符号出现的次数。正如我在手册中读到的那样,即使使用字符类,这仍然非常受限制,因为我们只能匹配具有固定长度的字符串。

为了解决这个问题,模式支持以下四个重复操作符:

  • '*' 将前一个字符(或类)匹配零次或多次,尽可能多地匹配。
  • '+' 将前一个字符(或类)匹配一次或多次,尽可能多地匹配。
  • '-' 将前一个字符(或类)匹配零次或多次,尽可能少地匹配。
  • '?' 使前一个字符(或类)成为可选项。

因此,没有关于花括号“{}”的信息

例如,

{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}' ' :)

网址说没有这样的魔法符号:

一些字符被称为魔法字符,当它们用于模式时具有特殊含义。魔法字符是

( ) . % + - * ? [ ^ $

花括号只作为简单文本工作,不再起作用。

我对吗?避免这个“错误”的最佳方法是什么?

可以在此处here阅读有关花括号的通常用法。

点赞
用户3832970
用户3832970

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

  1. 它们只有你提到的那四个(+-*?)。
  2. 不支持限定量词(你所需要的)。
  3. 与其他一些系统不同,在 Lua 中,修饰符只能应用于字符类;没有办法将模式分组到修饰符下(请参阅来源)。不幸的是,Lua 模式不支持此功能('(foo)+''(foo|bar)'),只能在单个字符之间重复或选择,不能在子模式或字符串之间运用。

作为一种“解决方法”,为了使用限定量词和所有其他 PCRE 正则表达式的优势,您可以使用 rex_pcre

或者,正如 @moteus 所建议的那样,一个部分解决方法 **来 "模拟" 限制性量词,只需有下限,重复模式多次并将可用的 Lua 量词应用于最后一个。例如,要匹配模式的 _三个或更多次出现_:

local np = 'abc_123'
local a = np:match('^[a-zA-Z0-9_][a-zA-Z0-9_][a-zA-Z0-9_]+$' )

参见 IDEONE 演示

另一个要考虑的库是 Lpeg

2015-10-01 10:31:31