Java 将Lua多行字符串和注释与正则表达式匹配

Java 将Lua多行字符串和注释与正则表达式匹配,java,regex,lua,Java,Regex,Lua,我有一个Lua编辑器,在其中我实现了语法高亮显示。我使用正则表达式来匹配Lua的字符串、注释、标记、数字等表达式。整个过程都是用Java编写的,并使用Java正则表达式。我有两个问题: 多行字符串-Lua多行括号以双方括号开始和结束[之间的所有内容都是字符串,甚至可以有嵌套的多行字符串。您可以看到我所做的,正则表达式是\[\[(?>[^\[\[\]\]\;(?R))*\]\],它是有效的。它与您在“匹配平衡构造”部分中看到的内容类似。它可以找到数量相等的[[和]表达式。问题是,Java正则表达式

我有一个Lua编辑器,在其中我实现了语法高亮显示。我使用正则表达式来匹配Lua的字符串、注释、标记、数字等表达式。整个过程都是用Java编写的,并使用Java正则表达式。我有两个问题:

多行字符串-Lua多行括号以双方括号开始和结束
[
之间的所有内容都是字符串,甚至可以有嵌套的多行字符串。您可以看到我所做的,正则表达式是
\[\[(?>[^\[\[\]\]\;(?R))*\]\]
,它是有效的。它与您在“匹配平衡构造”部分中看到的内容类似。它可以找到数量相等的
[[
]
表达式。问题是,Java正则表达式引擎不支持递归。我如何用支持的内容替换它

多行注释-Lua多行注释以
-->-[===[
开头,以
]====]
结尾。只有当开头括号中有尽可能多的等号时,它才会结束。在0和无限等号之间可以有任何地方。我制作了
-\[\[((.\124;\ n)*?)\]\]\]
,但它只适用于
-[[comment]]
模式,不支持此模式--[==[注释]=]。也许我可以做一些事情,比如在开始时计算等号匹配的数量,然后将相同的数字与结束标记匹配。在java正则表达式中可能吗?如何做?

试试这个

--\[(=*)\[(.|\n)*?\]\1\]
多行字符串文字绝对相同,但没有前导
--


Lua中的多行字符串不能嵌套:
x=[[[[]]]
是语法错误关于
(.|\n)*?
:如果正则表达式风格是Java,请避免此构造,使用
*?
并在正则表达式的开头添加
(?s)
,以避免堆栈溢出问题。基本上,始终避免
(.|\n)
东西。@WiktorStribiżew你的意思是使用单行标志以便
也匹配换行符吗?你能举例说明上面的两个正则表达式吗?1)
(?s)--\[(=*)\[(*)\[(.*)\]\1\]
,2)
(?s)\[(=*)\[(*)\[(.?\]\1\]
\[((=*)\[(.|\n)*?)\]\2\]