Treetop / PEG中的非贪婪匹配?

时间:2009-06-25 20:01:54

标签: regex treetop

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

/.+?;/

似乎唯一的办法就是:

[^;]+ ';'

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

3 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:1)

嗯,我知道PEG是贪婪的,而且没有办法解决它。但是,Lookaheads可用于模仿此行为,例如!(';' .)

答案 2 :(得分:0)

我不知道Treetop,但/[^;]+;/会工作吗?


通过快速搜索,我看到Treetop不会做贪婪或懒惰(非贪婪)量词的建议,+实际上是一个占有量词(在其他正则表达式中由++表示)

如果是这种情况,我不确定你是否有任何其他基于正则表达式的选项而不是被否定的类。