【发布时间】:2017-03-20 03:34:49
【问题描述】:
我有一个 Lua 编辑器,我在其中实现了语法高亮。我使用正则表达式来匹配 Lua 的字符串、cmets、令牌、数字等表达式。整个事情是用 Java 制作的,并使用 Java 正则表达式。我遇到了两件事:
多行字符串 - Lua 多行括号以双方括号[[ 开始和结束@ 之间的所有内容都是字符串,甚至可以嵌套多行字符串。你可以看到我所做的here,正则表达式是\[\[((?>[^\[\[\]\]]|(?R))*\]\]),它可以工作。它类似于您在this page 的匹配平衡构造 部分下看到的内容。它会找到具有相等数量的 [[ 和 ]] 的表达式。问题是,Java 正则表达式引擎不支持递归。如何将其替换为受支持的内容?
多行 cmets - Lua 多行 cmets 以 --[====[ 开头并以 ]====] 结尾。仅当等号与左括号一样多时才结束。可以有 0 到无限等号之间的任何位置。我制作了this regex--\[\[((.|\n)*?)\]\],但它仅适用于--[[ comment ]] 模式,不支持--[==[ comment ]==]。也许我可以做一些事情,比如计算开头等号匹配的数量,然后匹配结束标签的相同数字。这在java正则表达式中可能吗?怎么样?
【问题讨论】: