Grafana正则匹配数据库名:提取指定分组并排除-cluster后缀
Grafana数据库名匹配正则解决方案
针对你需要匹配的两类数据库名格式,这里提供可行的正则表达式方案,并解释之前的问题所在:
问题原因
你之前使用的(\w*-\w*)|(.*)-cluster之所以得到错误结果,是因为正则分支匹配是从左到右优先匹配:当处理production-aa-db3-cluster这类字符串时,左侧的(\w*-\w*)会先匹配到production-aa(两个由-连接的单词),正则就会停止后续匹配,不会触发右侧的(.*)-cluster分支,导致提取结果不符合预期。
可行正则方案
方案一:正向预查优先匹配(推荐)
这个方案逻辑简洁,能直接提取你需要的内容:
^(.*)(?=-cluster$)|^.*$
逻辑说明:
- 首先尝试匹配所有位于
-cluster结尾之前的内容((?=-cluster$)是正向预查,仅做条件判断,不会将-cluster包含在匹配结果中) - 如果字符串不以
-cluster结尾(即第一类<name>-<environment>格式),则直接匹配整个字符串
方案二:调整分支匹配顺序
通过将-cluster相关的匹配分支放在前面,避免被短匹配抢占:
^(.*)-cluster$|^(\w+(-\w+)+)$
逻辑说明:
- 先匹配以
-cluster结尾的字符串,捕获-cluster之前的全部内容 - 若不满足上述条件,则匹配至少两个由
-连接的单词组成的字符串(对应第一类格式)
验证结果
使用上述任意正则,都能得到你预期的结果:
db1-producion→ 完整匹配db2-production→ 完整匹配production-aa-db3-cluster→ 提取production-aa-db3production-aa-db4-cluster→ 提取production-aa-db4
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

