【发布时间】:2016-11-03 10:13:58
【问题描述】:
我有一长串来自石墨实例的命名空间,我正在尝试运行一些验证并过滤掉未使用正确格式输入的命名空间。
我通常可以使用正则表达式,但这个伤害了我,希望有人能提供帮助。
有一些基本的验证需要完成,我已经走到了这一步:
^(stats\.gauges\..*\.(?:dur|hop|scz|led|bgi|shi|crk|sas)\.(?:p|s|q|u|d|x)\.)
目标是过滤和匹配遵循标准化stats.gaugues.*.(exact OR match).(exact OR match).的那些
这适用于以下情况:
stats.gauges.gitswarm.dur.p.durgitswarm1.service.repos.eeps-merge_demo.users
但不幸的是,有人输入了类似的内容:
stats.gauges.gitswarm.dur.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users
所以这些匹配一直到第二个dur.p. 跳过精确匹配上可能出现的错误,例如stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users;这是我不想要的。
我觉得这很简单,但到目前为止似乎无法掌握。
非常感谢任何帮助。
谢谢!
【问题讨论】:
-
那么为什么
stats.gauges.gitswarm.durham.p.durgitswarm1.dur.p.service.repos.eeps-merge_demo.users不遵循标准化的stats.gaugues.*.(exact OR match).(exact OR match).?在这种情况下,*匹配gitswarm.durham.p.durgitswarm1。问题在于您对*的定义。 -
它需要失败,因为 1) dur 是有效值,而不是 durham 和 2) dur.p。不应该在它所在的位置,即使是无效值。我同意 * 的定义,我认为这是我在放入正则表达式时遇到的问题。