捕获正则表达式中的所有但最后一个块

时间:2018-05-17 15:05:47

标签: regex-group prometheus

我正在尝试从Prometheus重新标签配置(基于正则表达式)中的变量中提取值。所有值都与模式匹配:

[a-zA-Z]+(-[a-zA-Z]+)*

我想获取该值并在-admin部分存在时删除它。

示例:

foo-bar-baz     ->  foo-bar-baz
foo             ->  foo
qux-quuz-admin  ->  qux-quuz

如果所有值都有-admin,我会写:

- source_labels: ['__meta_consul_service']
  regex: '(.*)-admin'
  target_label: 'job'
  replacement: '$1'

但情况不一定如此。

我可能已经做了一个负向前瞻(?!...)但看起来Go不支持。

这样做的方法是什么?

2 个答案:

答案 0 :(得分:0)

这个怎么样?

# Remove '-admin' suffix from `__meta_consul_service`. Ignored if not present.
- source_labels: ['__meta_consul_service']
  regex: '(.*)-admin'
  target_label: '__meta_consul_service'
  replacement: '$1'

# Store the (possibly trimmed) result in `job`.
- source_labels: ['__meta_consul_service']
  target_label: 'job'
  replacement: '$1'

Haven没试过,但它应该有效。

答案 1 :(得分:0)

*是一个贪婪的运算符:它尽可能匹配。有一个非贪婪的运算符:*?

它增加了最短的""到*运营商。

配置更改为:

- source_labels: ['__meta_consul_service']
  regex: '(.*)-admin'
  target_label: 'job'
  replacement: '$1'

为:

- source_labels: ['__meta_consul_service']
  regex: '(.*?)(-admin)?'
  target_label: 'job'
  replacement: '$1'