Lua 模式设置中符号的重复次数
Amount of repetitions of symbols in Lua pattern setup
我正在寻找 Lua 模式设置中符号的重复次数。
我尝试检查字符串中的符号数量。
正如我在 manual 中所读到的,
即使使用字符 类 这仍然非常有限,因为我们只能匹配固定长度的字符串。
To solve this, patterns support these four repetition operators:
- '*' Match the previous character (or class) zero or more times, as many times as possible.
- '+' Match the previous character (or class) one or more times, as many times as possible.
- '-' Match the previous character (or class) zero or more times, as few times as possible.
- '?' Make the previous character (or class) optional.
所以,没有关于大括号的信息 {}
例如,
{1,10}; {1,}; {10};
无效。
local np = '1'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
returns np = nil
.
local np = '1{1}'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
returns np = '1{1}'
:)
这个url说没有这样的魔法符号:
Some characters, called magic characters, have special meanings when
used in a pattern. The magic characters are
( ) . % + - * ? [ ^ $
花括号只能作为简单文本使用,仅此而已。
我对吗?避免这种情况的最佳方法是什么 'bug'?
可以阅读大括号的常用用法,例如here。
我们不得不承认 Lua 正则表达式量词的功能非常有限。
- 它们就是您提到的那 4 个(
+
、-
、*
和 ?
)
- 不支持限制量词(您需要的)
- 与其他一些系统不同,在 Lua 中修饰符只能应用于角色 class;无法在修饰符下对模式进行分组(请参阅 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.
作为 "work-around",为了使用 限制量词 和所有其他 PCRE 正则表达式特权,您可以使用 rex_pcre
library.
或者,正如@moteus 所建议的,部分解决方法 到 "emulate" 限制量词只有下限 ,只需重复模式以匹配它几次并应用可用的 Lua 量词到最后一个。例如。匹配 3 次或更多次 模式:
local np = 'abc_123'
local a = np:match('^[a-zA-Z0-9_][a-zA-Z0-9_][a-zA-Z0-9_]+$' )
另一个要考虑的库而不是 PCRE 是 Lpeg。
我正在寻找 Lua 模式设置中符号的重复次数。 我尝试检查字符串中的符号数量。 正如我在 manual 中所读到的, 即使使用字符 类 这仍然非常有限,因为我们只能匹配固定长度的字符串。
To solve this, patterns support these four repetition operators:
- '*' Match the previous character (or class) zero or more times, as many times as possible.
- '+' Match the previous character (or class) one or more times, as many times as possible.
- '-' Match the previous character (or class) zero or more times, as few times as possible.
- '?' Make the previous character (or class) optional.
所以,没有关于大括号的信息 {}
例如,
{1,10}; {1,}; {10};
无效。
local np = '1'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
returns np = nil
.
local np = '1{1}'
local a = np:match('^[a-zA-Z0-9_]{1}$' )
returns np = '1{1}'
:)
这个url说没有这样的魔法符号:
Some characters, called magic characters, have special meanings when used in a pattern. The magic characters are
( ) . % + - * ? [ ^ $
花括号只能作为简单文本使用,仅此而已。 我对吗?避免这种情况的最佳方法是什么 'bug'?
可以阅读大括号的常用用法,例如here。
我们不得不承认 Lua 正则表达式量词的功能非常有限。
- 它们就是您提到的那 4 个(
+
、-
、*
和?
) - 不支持限制量词(您需要的)
- 与其他一些系统不同,在 Lua 中修饰符只能应用于角色 class;无法在修饰符下对模式进行分组(请参阅 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.
作为 "work-around",为了使用 限制量词 和所有其他 PCRE 正则表达式特权,您可以使用 rex_pcre
library.
或者,正如@moteus 所建议的,部分解决方法 到 "emulate" 限制量词只有下限 ,只需重复模式以匹配它几次并应用可用的 Lua 量词到最后一个。例如。匹配 3 次或更多次 模式:
local np = 'abc_123'
local a = np:match('^[a-zA-Z0-9_][a-zA-Z0-9_][a-zA-Z0-9_]+$' )
另一个要考虑的库而不是 PCRE 是 Lpeg。