我在grafana中有一个要捕获的数据库名称列表:
db1-producion
db2-production
production-aa-db3-cluster
production-aa-db4-cluster
一组是<name>-<environment>
,另一组是<environment>-aa-<name>-cluster
,但我想把-cluster
从第二组中排除。(.*)-cluster
工作并从第二组数据库名称中过滤-cluster
,返回:production-aa-db3
和production-aa-db4
但是当我添加(\w*-\w*)|(.*)-cluster
来捕获第一个组时,它会返回:db1-producion
、db2-production
和production-aa
结果应为:
db1-producion
db2-production
production-aa-db3
production-aa-db4
欢迎任何想法。
1条答案
按热度按时间oprakyz71#
您的方法中的问题是Grafana使用第一个捕获组作为结果 *,并且在表达式
(\w*-\w*)|(.*)-cluster
中,第一个组匹配由破折号分隔的前两个单词。(即使你避免了匹配,你也会得到一个空变量,因为第一组不包含任何东西)要从结果中删除尾随的
-cluster
,您可以使用(.+?)(-cluster)?
。在这里,first group匹配任何东西,但是是以一种惰性的方式,因此允许匹配可选的
-cluster
,如果它存在于行的末尾。我假设锚
^
和$
在这种情况下是不必要的,因为Grafana似乎更喜欢匹配整个输入字符串,但不幸的是,我在文档中找不到这种行为的参考。value
或text