这是从关于这个问题的评论中分离出来的。
据我了解,在 PEG 语法中,可以通过编写来实现非贪婪搜索S <- E2 / E1 S
(或 S = 模式 E2,如果可能,或模式 E1 和继续 S)。
但是,我不想在最终模式中捕获 E2 - 我想最多捕获E2。当尝试在 LPEG 中实现这一点时,我遇到了几个问题,包括将其构建到语法中时出现“规则中的空循环”错误。
我们将如何在 LPEG 语法中实现以下搜索:[tag] foo [/tag]
我们想在捕获表中捕获标记的内容(示例中为“foo”),但我们想在结束标记之前终止?正如我从对另一个问题的评论中了解到的那样,这应该是可能的,但我在 LPEG 中找不到示例。
这是测试语法的一个片段
local tag_start = P"[tag]"
local tag_end = P"[/tag]"
G = P{'Pandoc',
...
NotTag = #tag_end + P"1" * V"NotTag"^0;
...
tag = tag_start * Ct(V"NotTag"^0) * tag_end;
}