首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Treetop/PEG中的非贪婪匹配?

Treetop/PEG中的非贪婪匹配?
EN

Stack Overflow用户
提问于 2009-06-25 20:01:54
回答 3查看 1.3K关注 0票数 4

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

代码语言:javascript
复制
/.+?;/

看起来唯一的办法就是:

代码语言:javascript
复制
[^;]+ ';'

这有点丑陋..还有别的办法吗?.+?似乎不起作用..

EN

回答 3

Stack Overflow用户

发布于 2010-02-09 06:01:45

默认情况下,PEGs是贪婪和盲目的,这意味着它们会尽可能多地获取输入,并且不会考虑随后会发生什么:

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

不过,通过使用有序选择(而不使用lookahead)可以相当容易地解决这个问题:

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

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

票数 11
EN

Stack Overflow用户

发布于 2009-07-03 05:26:23

好吧,我知道钉子是贪婪的,这是没有办法的。Lookahead可以用来模仿这种行为,比如!(';' .)

票数 1
EN

Stack Overflow用户

发布于 2009-06-25 22:20:48

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

通过快速搜索,我发现Treetop既不做贪婪也不做懒惰(非贪婪)量词,+实际上是一个所有格量词(在其他正则表达式中用++表示)。

如果是这种情况,我不确定除了被否定的类之外,还有没有其他基于regex的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1045932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档