Lua 模式匹配中“.-”的 RegEx 等价物是什么?
What is the RegEx equivalent of ".-" in Lua's pattern matching?
我正在将一些 Lua 代码移植到 JS,但到目前为止我还没有使用过 Lua。
有 Lua 模式 "^([^aeiouàèéêíòóôúïü]*)(.-)$"
我发现连字符 here 的以下解释:
- Match the previous character (or class) zero or more times, as few times as possible.
我正在尝试找出与正则表达式等效的内容。我也不明白为什么首先需要这个 - 以 (.*)$
结尾还不够吗?
在 Java 中,.-
实际上等同于 [\s\S]*?
或 (?s).*?
,或者 - 为了安全起见 - (?s:.*?)
,因为 .
在 Lua 模式中匹配任何字符(包括换行字符)并且 -
是惰性 (non-greedy) 量词匹配 0 个或多个字符,即 *?
在常规NFA 正则表达式。
参见Lua patterns:
. all characters
然后
The `+´
modifier matches one or more characters of the original class. It will always get the longest sequence that matches the pattern.
The modifier `*´
is similar to `+´
, but it also accepts zero occurrences of characters of the class...
Like `*´
, the modifier `-´
also matches zero or more occurrences of characters of the original class. However, instead of matching the longest sequence, it matches the shortest one.
实际上,该模式与许多语言中相应的正则表达式非常等价。 Javascript 似乎没有 -
量词,但你应该可以用 .*
替换它,它应该仍然有效。
尝试"^([^aeiouàèéêíòóôúïü]*)(.*)$"
当然,你也可以在Lua REPL中进行测试:
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> orig = '^([^aeiou]*)(.-)$'
> modif = '^([^aeiou]*)(.*)$'
> ("jhljkhaaaasjkdf"):match(orig)
jhljkh aaaasjkdf
> ("jhljkhaaaasjkdf"):match(modif)
jhljkh aaaasjkdf
> -- QED
我正在将一些 Lua 代码移植到 JS,但到目前为止我还没有使用过 Lua。
有 Lua 模式 "^([^aeiouàèéêíòóôúïü]*)(.-)$"
我发现连字符 here 的以下解释:
- Match the previous character (or class) zero or more times, as few times as possible.
我正在尝试找出与正则表达式等效的内容。我也不明白为什么首先需要这个 - 以 (.*)$
结尾还不够吗?
在 Java 中,.-
实际上等同于 [\s\S]*?
或 (?s).*?
,或者 - 为了安全起见 - (?s:.*?)
,因为 .
在 Lua 模式中匹配任何字符(包括换行字符)并且 -
是惰性 (non-greedy) 量词匹配 0 个或多个字符,即 *?
在常规NFA 正则表达式。
参见Lua patterns:
. all characters
然后
The
`+´
modifier matches one or more characters of the original class. It will always get the longest sequence that matches the pattern.
The modifier`*´
is similar to`+´
, but it also accepts zero occurrences of characters of the class...
Like`*´
, the modifier`-´
also matches zero or more occurrences of characters of the original class. However, instead of matching the longest sequence, it matches the shortest one.
实际上,该模式与许多语言中相应的正则表达式非常等价。 Javascript 似乎没有 -
量词,但你应该可以用 .*
替换它,它应该仍然有效。
尝试"^([^aeiouàèéêíòóôúïü]*)(.*)$"
当然,你也可以在Lua REPL中进行测试:
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
> orig = '^([^aeiou]*)(.-)$'
> modif = '^([^aeiou]*)(.*)$'
> ("jhljkhaaaasjkdf"):match(orig)
jhljkh aaaasjkdf
> ("jhljkhaaaasjkdf"):match(modif)
jhljkh aaaasjkdf
> -- QED