首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止一种模式多次匹配?

如何防止一种模式多次匹配?
EN

Stack Overflow用户
提问于 2015-09-29 19:36:40
回答 1查看 40关注 0票数 0

当我的温度计离线时,我正试图用这个模式来识别:

代码语言:javascript
复制
Pattern "missing temps" (temp : &float ∈ any):
     @temp is nil 5..;

它可以工作,但如果有超过5个值缺失,我得到一个单独的匹配,每一个缺失值超过5。

所以如果我有:

50 -0- 50 51

我得到了3支火柴:

零零 零零 零零

如果一个温度计离线很长时间,通知就会完全失控。它为什么要这么做?我怎么才能阻止多余的火柴?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-29 21:13:35

从Barrage的POV中,多个匹配并不是多余的;它通过在每个值上重新启动模式匹配来完成它应该做的事情。恰好,这里的模式可以多次匹配同一系列的值。

当然,在这种情况下,这种行为并没有多大帮助。不过,这是一个简单的解决办法:

代码语言:javascript
复制
Pattern "missing temps" (temp : &float ∈ any):
    @temp is nil 5.. [longest];

[longest]告诉Barrage,一旦遇到至少五个连续的_nil_s:

  • 在检查下一个事件之前,不要考虑步骤“匹配”。

  • 在下一个事件导致步骤失败之前,不要完成步骤匹配。

因此,对于你的例子:

50 -0- 50 51

该步骤将在可能最长的零值序列之后才匹配:

零零

如果您有20个连续的零值,那么直到它在所有的20个_nil_s上重复之后,这个步骤才会匹配。

因此,只需将[longest]添加到步骤的末尾,您的模式就应该做您想做的事情。

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

https://stackoverflow.com/questions/32852377

复制
相关文章

相似问题

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