使用Regex匹配Lua多行字符串和注释

时间:2016-11-06 20:33:40

标签: java regex lua

我有一个Lua编辑器,我在其中实现了语法高亮。我使用正则表达式来匹配Lua的字符串,注释,标记,数字等表达式。整个过程都是用Java创建的,并使用Java正则表达式。我遇到两件事情有困难:

多行字符串 - Lua多行括号以双方括号开头和结尾[[之间的所有内容都是字符串,甚至可以嵌套多行字符串。你可以看到我做了什么here,正则表达式是\[\[((?>[^\[\[\]\]]|(?R))*\]\])并且它有效。它与您在匹配平衡构造部分下this page上看到的内容类似。它找到等量[[]]的表达式。事实上,Java正则表达式引擎不支持递归。如何用支持的东西替换它?

多行注释 - Lua多行注释以--[====[开头,以]====]结尾。只有在与开口支架一样多的等号时才会结束。可以有0到无限等号之间的任何地方。我制作了this regex --\[\[((.|\n)*?)\]\],但它仅适用于--[[ comment ]]模式,并且不支持此--[==[ comment ]==]。也许我可以做一些事情,比如在开头计算等号的匹配数,然后匹配结束标签的数字。这在java正则表达式中是否可行?怎么样?

1 个答案:

答案 0 :(得分:2)

试试这个

--\[(=*)\[(.|\n)*?\]\1\]

多行字符串文字完全相同但没有前导--

\[((=*)\[(.|\n)*?)\]\2\]
相关问题