使用re2正则表达式对字符串模式求反

时间:2020-07-25 10:49:46

标签: regex prometheus grafana re2

我正在使用re2正则表达式来匹配和求反,如this link

以下分别是可能的输入

  1. abcd-st- ed -qrew
  2. ktm-ewe-abcd-st- ed -qrew
  3. abcd-st-wer-qrew-wabe
  4. ktm-ewe-abcd-st-qrew-qrrt

条件是:

  • 如果字符串以abcd-开头,则它应取反(不应包含)-ed
  • 如果字符串以ktm-开头并且还包含-abcd-,则它应该取反(不应包含)-ed

正则表达式应省略第一和第二输入,因为它包含-ed。应该通过第三和第四输入 引用链接中的正则表达式适用于两种情况的匹配情况,但不适用于否定(不包含)事物。希望需要一些调整来否定。

注意:这是关于grafana中普罗米修斯数据的正则表达式。这就是为什么我也要标记它们。

1 个答案:

答案 0 :(得分:0)

您可以使用以下模式:

^(?:ktm(?:-e|-(?:[^e\W]|e[^d\W])\w*)*-)?abcd(?:-e|-(?:[^e\W]|e[^d\W])\w*)*$

Demo

如果您想将其与other question中的正则表达式结合使用,它将是:

\bkey="((?:ktm(?:-e|-(?:[^e\W]|e[^d\W])\w*)*-)?abcd(?:-e|-(?:[^e\W]|e[^d\W])\w*)*)"

Demo

重要部分(即(?:-e|-(?:[^e\W]|e[^d\W])\w*)的细分在另一个问题中的my answer中进行了说明。该部分同时用于abcdktm。我知道有些事情需要澄清。