首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贪婪块()*包含通配符

贪婪块()*包含通配符
EN

Stack Overflow用户
提问于 2013-05-15 01:18:45
回答 1查看 1.9K关注 0票数 3

我正在用ANTLR4构建一个语法,我得到了这个警告

TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred

下面是它引用的代码行

代码语言:javascript
复制
block
    : ( statement | functionDecl )* (Return expression ';')?
    ;

警告是什么意思,我如何纠正它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 01:29:25

警告是告诉您块()*是贪婪的,这意味着它将尝试匹配statementfunctionDec1的最大出现次数,根据情况,这可能不是您所期望的。

将其更改为()*?将使其不贪婪,正如警告所建议的那样。这意味着它将匹配statementfunctionDec1的最小出现次数。

带有字符串的表达式示例:

示例:

代码语言:javascript
复制
foofoobar
foobarbar
foofoobarbarbar

表达式:

代码语言:javascript
复制
(foo|bar)*bar

将给出结果:

代码语言:javascript
复制
foofoobar
foobarbar
foofoobarbarbar

表达式:

代码语言:javascript
复制
(foo|bar)*?bar

将给出结果:

代码语言:javascript
复制
foofoobar
foobar
foofoobar

对于最后一个,结果将在第一个bar处停止

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

https://stackoverflow.com/questions/16549136

复制
相关文章

相似问题

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