我有一个Lua编辑器,我在其中实现了语法高亮。我使用正则表达式来匹配Lua的字符串,注释,标记,数字等表达式。整个过程都是用Java创建的,并使用Java正则表达式。我遇到两件事情有困难:
多行字符串 - Lua多行括号以双方括号开头和结尾[[
之间的所有内容都是字符串,甚至可以嵌套多行字符串。你可以看到我做了什么here,正则表达式是\[\[((?>[^\[\[\]\]]|(?R))*\]\])
并且它有效。它与您在匹配平衡构造部分下this page上看到的内容类似。它找到等量[[
和]]
的表达式。事实上,Java正则表达式引擎不支持递归。如何用支持的东西替换它?
多行注释 - Lua多行注释以--[====[
开头,以]====]
结尾。只有在与开口支架一样多的等号时才会结束。可以有0到无限等号之间的任何地方。我制作了this regex --\[\[((.|\n)*?)\]\]
,但它仅适用于--[[ comment ]]
模式,并且不支持此--[==[ comment ]==]
。也许我可以做一些事情,比如在开头计算等号的匹配数,然后匹配结束标签的数字。这在java正则表达式中是否可行?怎么样?
答案 0 :(得分:2)
试试这个
--\[(=*)\[(.|\n)*?\]\1\]
多行字符串文字完全相同但没有前导--
:
\[((=*)\[(.|\n)*?)\]\2\]