Treetop/PEG中的非贪婪匹配?

clo*_*ead 3 regex treetop

我如何在Treetop中做这样的事情?

/.+?;/
Run Code Online (Sandbox Code Playgroud)

这似乎是唯一的方法:

[^;]+ ';'
Run Code Online (Sandbox Code Playgroud)

哪种丑陋......还有其他方式吗?.+?似乎不起作用..

Luk*_*gli 10

默认情况下,PEG是贪婪和盲目的,这意味着他们尽可能多地输入,并且他们不考虑之后发生的事情:

S <- P1* P2 (贪婪,盲目)

通过使用有序选择(并且不使用前瞻),这可以非常容易地修复:

S <- P1 S / P2 (贪心,非盲)

S <- P2 / P1 S (懒惰,非盲)


Pet*_*ton 0

我不知道 Treetop,但是可以吗/[^;]+;/


通过快速搜索,我看到建议 Treetop 不执行贪婪或懒惰(非贪婪)量词,并且+实际上是一个所有格量词(由++其他正则表达式风格表示)。

如果是这种情况,我不确定除了否定类之外,您还有其他基于正则表达式的选项。