使用正则表达式匹配 Lua 多行字符串和注释

我有一个 Lua 编辑器,我实现了语法高亮。我使用正则表达式匹配 Lua 的字符串、注释、标记、数字等。整个工具是用 Java 制作的,使用 Java 的正则表达式。我遇到了两个问题:

多行字符串 - Lua 多行括号以双方括号 [[ 开始和结束,之间的所有东西都是字符串,甚至可以嵌套多行字符串。你可以在这里看到我做的东西,正则表达式是 \[\[((?>[^\[\[\]\]]|(?R))*\]\]),它可以找到相同数量的[[]],这与这个页面中的 match balanced constructs 部分所展示的类似。问题是,Java 正则表达式引擎不支持递归。我该如何用支持的方式来替换它呢?

多行注释 - Lua 多行注释以 --[====[ 开始,以 ]====] 结束。只有在开头和结尾有相同数量的等号时,它才会结束。可能有 0 到无限个相等的号码。我使用 这个正则表达式 --\[\[((.|\n)*?)\]\],但它仅适用于 --[[ comment ]] 模式,不支持 --[==[ comment ]==] 模式。也许我可以做一些统计开头等号匹配数并与结尾标记匹配相同数目的事情。在 Java 正则表达式中是否可能?

点赞
用户1847592
用户1847592

尝试一下

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

多行字符串与之相同,但没有前导 --

\[((=*)\[(.|\n)*?)\]\2\]
2016-11-06 20:50:02