捕获正则表达式中除最后一个块之外的所有块
Capture all but last block in regex
我正在尝试从 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: ''
但不一定如此。
我本可以用负面的前瞻性来做到这一点 (?!...
),但似乎 Go 不支持它。
有什么方法可以做到这一点?
*
是一个贪心运算符:它会尽可能多地匹配。有一个非贪婪运算符:*?
。
它向 *
运算符添加了一个 "the shortest as possible"。
配置更改自:
- source_labels: ['__meta_consul_service']
regex: '(.*)-admin'
target_label: 'job'
replacement: ''
至:
- source_labels: ['__meta_consul_service']
regex: '(.*?)(-admin)?'
target_label: 'job'
replacement: ''
我正在尝试从 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: ''
但不一定如此。
我本可以用负面的前瞻性来做到这一点 (?!...
),但似乎 Go 不支持它。
有什么方法可以做到这一点?
*
是一个贪心运算符:它会尽可能多地匹配。有一个非贪婪运算符:*?
。
它向 *
运算符添加了一个 "the shortest as possible"。
配置更改自:
- source_labels: ['__meta_consul_service']
regex: '(.*)-admin'
target_label: 'job'
replacement: ''
至:
- source_labels: ['__meta_consul_service']
regex: '(.*?)(-admin)?'
target_label: 'job'
replacement: ''