当正则表达式包含 \w 时,带有 label_replace 的 promql 正则表达式返回空白值

Posted

技术标签:

【中文标题】当正则表达式包含 \\w 时,带有 label_replace 的 promql 正则表达式返回空白值【英文标题】:promql regex with label_replace returns blank value when regex contain \w当正则表达式包含 \w 时,带有 label_replace 的 promql 正则表达式返回空白值 【发布时间】:2021-10-31 05:08:52 【问题描述】:

我返回了这个指标

my_sqldatabaseaggregation="maximum", instance="sql-metrics-exporter", interval="PT5M", job="metrics-sqldatabase", id="/sub/1291-3432432-e432/mydatabase"

我想为一个名为 db 的新标签提取 / 之后的最后一位(即 mydatabase),并尝试了以下

label_replace(my_sqldatabasemetric="storage_percent", aggregation="maximum", "db", "$1", "id", "([\\w]+$)")

我总是以这样的空值 db 或错误结束

my_sqldatabaseaggregation="maximum", db="" instance="sql-metrics-exporter", interval="PT5M", job="metrics-sqldatabase", id="/sub/1291-3432432-e432/mydatabase"

任何想法我哪里出错了?我尝试过 ([\w]+$), [\w]+$, [\w]+$, ([\\w]+$) 并且得到错误或空白值。似乎是 \ 导致了这个问题,但我不知道为什么或如何解决它。

【问题讨论】:

【参考方案1】:

试试这个:

label_replace(my_sqldatabasemetric="storage_percent", aggregation="maximum", "db", "$1", "id", ".+/(.+)")

【讨论】:

谢谢你!任何想法为什么 \w 会导致问题,如果是这样,如何解决它? "\w" 与斜杠 ("/") 不匹配。你可以使用这个:“.+/(\\w+)”。它会起作用的。

以上是关于当正则表达式包含 \w 时,带有 label_replace 的 promql 正则表达式返回空白值的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 还提取带有 www 的 URL

c++,正则

正则表达式前瞻丢弃匹配

仅当字符串包含指定的内容但没有其他内容时,正则表达式匹配

带有 unicode 字符的 Python 正则表达式错误?

当字符串包含特殊字符时,缓慢的正则表达式查询