regex Grafana正则表达式捕获两个组

j7dteeu8  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(160)

我在grafana中有一个要捕获的数据库名称列表:

  • db1-producion
  • db2-production
  • production-aa-db3-cluster
  • production-aa-db4-cluster

一组是<name>-<environment>,另一组是<environment>-aa-<name>-cluster,但我想把-cluster从第二组中排除。
(.*)-cluster工作并从第二组数据库名称中过滤-cluster,返回:production-aa-db3production-aa-db4
但是当我添加(\w*-\w*)|(.*)-cluster来捕获第一个组时,它会返回:db1-produciondb2-productionproduction-aa
结果应为:

  • db1-producion
  • db2-production
  • production-aa-db3
  • production-aa-db4

欢迎任何想法。

oprakyz7

oprakyz71#

您的方法中的问题是Grafana使用第一个捕获组作为结果 *,并且在表达式(\w*-\w*)|(.*)-cluster中,第一个组匹配由破折号分隔的前两个单词。(即使你避免了匹配,你也会得到一个空变量,因为第一组不包含任何东西)
要从结果中删除尾随的-cluster,您可以使用(.+?)(-cluster)?
在这里,first group匹配任何东西,但是是以一种惰性的方式,因此允许匹配可选的-cluster,如果它存在于行的末尾。

我假设锚^$在这种情况下是不必要的,因为Grafana似乎更喜欢匹配整个输入字符串,但不幸的是,我在文档中找不到这种行为的参考。

  • :除非存在命名组valuetext

相关问题