在 Lua 的模式匹配中,正则表达式相当于 ".-" 吗?



我正在将一些LUA代码移植到JS,但到目前为止,我还没有与Lua合作。有LUA模式"^([^aeiouàèéêíòóôúïü]*)(.-)$",我在这里找到了以下有关连字符的说明:

- 尽可能少次匹配上一个字符(或类(零或更多次。

我试图弄清楚同等的正则表达式是什么。另外,我不明白为什么首先需要这一点 - 在(.*)$中结束是否足够?

在java中, .-实际上等同于 [sS]*?(?s).*?或 - 要安全播放它- (?s:.*?),因为lua模式中的 .与任何字符(包括line break chars(和 -是匹配的与0或更多字符相匹配的懒惰(非绿色(量词,即常规NFA正则态度中的*?

请参阅LUA模式:

. all characters

,然后

`+´修饰符匹配原始类的一个或多个字符。它将始终获得与模式相匹配的最长序列。

修饰符`*´`+´相似,但它也接受类的字符零出现...


`*´一样,修饰符`-´也匹配原始类的字符的零或更多。但是,它不匹配最长的序列,而是匹配最短的序列。

实际上,该模式在许多语言中几乎等同于相应的正则等级。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

最新更新