我正在使用谷歌 re2用于查询 Prometheus 的正则表达式在 Grafana 仪表板上。尝试通过以下 3 种可能的输入字符串从键中获取值
1. object{one="ab-vwxc",two="value1",key="abcd-eest-ed-xyz-bnn",four="obsoleteValues"}
2. object{one="ab-vwxc",two="value1",key="abcd-eest-xyz-bnn",four="obsoleteValues"}
3. object{one="ab-vwxc",two="value1",key="abcd-eest-xyz-bnn-ed",four="obsoleteValues"}
..验证如下所示
- 应该包含
abcd-
- 不应包含
-ed
不知何故this regex
\bkey="(abcd(?:-\w+)*[^-][^e][^d]\w)"
..满足第一个条件abcd-
但不能满足第二个条件(否定-ed
)。
第二个输入选项的预期输出将是 abcd-eest-xyz-bnn
。任何帮助将非常感激。非常感谢。
最佳答案
如果我正确理解您的要求,则以下模式应该有效:
\bkey="(abcd(?:-e|-(?:[^e\W]|e[^d\W])\w*)*)"
Demo .
重要部分分解:
(?: # Start a non-capturing group.
-e # Match '-e' literally.
| # Or the following...
- # Match '-' literally.
(?: # Start a second non-capturing group.
[^e\W] # Match any word character except 'e'.
| # Or...
e[^d\W] # Match 'e' followed by any word character except 'd'.
) # Close non-capturing group.
\w* # Match zero or more additional word characters.
) # Close non-capturing group.
或者简单来说:
Match a hyphen followed by:
- only the letter 'e'. Or..
- a word* not starting with 'e'. Or..
- a word starting with 'e' not followed by 'd'.
*此处的“单词”表示正则表达式中定义的一串单词字符。
关于regex - 如何使用 re2 正则表达式否定字符串模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63061762/