Eu tenho essa string grafana-stack_alloy
e preciso de tudo depois do primeiro sublinhado
alloy
.
Preciso do resultado como um grupo $1
. Tentei este, mas falhou (?:)?([^_]+)*$
.
Alguém pode me ajudar a resolver esse problema?
Estou testando isto:
rule {
action = "replace"
source_labels = [
"__meta_docker_container_label_com_docker_swarm_service_name",
]
regex = "^(?:;*)?([^;]+).*$" work but wrong
//regex = "[^_]+.$" ----> not work
//regex = "([^_]+)$" ----> not work
replacement = argument.namespace.value + "/$1"
target_label = "job"
}
Trata-se do Agente Grafana com relabel-regex: Grafana prometheus.relabel que usa o RE2 do Google como seu mecanismo de regex.
desde já, obrigado
No que diz respeito ao Grafana usar o sabor regex Golang , você precisa modificar o regex para:
Veja as explicações da demonstração online
Documento oficial menciona Golang também :
Eles receberão tudo depois do último sublinhado.
ou
Se você quiser tudo depois do primeiro sublinhado:
ou altere o primeiro
*
para a+
se não quiser sublinhados à esquerda.Se você quiser também eliminar o segundo sublinhado em um sublinhado duplo, mas obter tudo depois disso, tente
Se você quiser uma correspondência mais específica, talvez você queira
Se nenhuma delas fizer o que você quer, você precisará fornecer mais do contexto circundante do que a string fornecida.
Como a "substituição" é:
Isso implica que o que é correspondido pela expressão regular é substituído por aquilo.
Em
grafana-stack_alloy
, sua([^_]+)$
expressão regular corresponderá corretamente àalloy
parte posterior_
e a capturará em$1
, mas como toda a expressão regular corresponde somente a isso, após a substituição de , você obterá:Se o que você quer que o resultado após a substituição seja apenas
<argument.namespace.value>/alloy
, então você precisa que a regex corresponda a toda a entrada e, a partir disso, capture a parte depois_
.*?
Como o RE2 suporta o operador de repetição não ganancioso do Perl , isso pode ser apenas:As âncoras (
^
,$
) nem são necessárias, pois é garantido que essa expressão regular corresponderá a toda a entrada, desde que contenha pelo menos uma_
(e não corresponderá de forma alguma, com ou sem âncora, se não houver_
).