我正在使用Grafana和Prometheus创建一些图表,但我认为这基本上是一个regexp (RE2?)有个问题。我正在动态地创建一个元素列表并填充一个变量(查询label_values(source),其中"source“包含可能的结果列表)。查询返回如下列表:
udr_foo
udr_owls
dns-baz1
dns-baz399
rpz_c_1.donotuse
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2我不能修改数据库中的数据;我必须用regexp来减少它。目前,我有一个RE2 regexp,我把它拼凑在一起,应用到列表中去做一些排除:
/^(?!dns|udr|rpzlog_c_1.donotuse).*/
这给了我一个部分有用的结果,因为它排除了我不想要的结果:
rpz_c_1.memosis
rpz_c_1.argylesocks
rpz_c_1.argylesocks3
rpz_c_1.argylesocks_http2问题:,我将如何修改这个正则表达式,以便通过去掉前面的“rpz_c_1”,给出一个更简洁的结果集。string组件?,因为这是嵌入在Grafana工具中的,所以我不能将多个regexp实例化与一个shell一起“管道”--我只有一个regexp机会来修改结果。这是我希望返回的一组结果:
memosis
argylesocks
argylesocks3
argylesocks_http2我的经验可能很糟糕。一种更简洁的看待这一问题的方法可能是:
发布于 2020-05-15 20:08:13
您可以通过在匹配点之后用rpz_c_1.启动匹配来简化负面展望,断言右边的不是donotuse。
如果是这样的话,使用一个与1+非空格字符匹配的捕获组,使用\S+,因为使用.*将匹配除换行符0+时间以外的任何字符。
^rpz_c_1\.(?!donotuse)(\S+)https://stackoverflow.com/questions/61824254
复制相似问题