0

我有一个正则表达式,它从给定键中获取值,如下所示

正则表达式 .*key="([^"]*)".*输入值key="abcd-qwer-qaa-xyz-vwxc"

输出abcd-qwer-qaa-xyz-vwxc

但是,最重要的是,我需要验证值仅从abcd-以下模式匹配开始-xyz

因此,输入和输出必须如下:

匹配的输出

我在下面尝试了它没有按预期工作

.*key="([^"]*)"?(/Babcd|-xyz).*

键值对是大字符串的一部分,如下所示:

object{one="ab-vwxc",two="value1",key="abcd-eest-wd-xyz-bnn",four="obsolete Values"}

我认为通过匹配键来获取值,这就是 yi 使用的.*key="([^"]*)".*

注意:它是一个仪表板。您可以参考此链接并搜索Regex: /"([^"]+)"/此正则表达式应用于查询结果,它是我引用的字符串。它与.*key="([^"]*)".*上面的那个正则表达式一起工作。我正在尝试使用该 regexGroup 本身进行更改。希望这可以帮助?

任何人都可以指导或建议我吗?那会很有帮助。谢谢!

4

3 回答 3

3

看起来你可以这样做:

\bkey="(abcd(?=.*-xyz\b)(?:-[a-z]+){4})"

在线查看演示

  • \bkey="- 单词边界和字面匹配'key="'
  • (- 打开第一个捕获组。
    • abcd- 字面上匹配'abcd'。
    • (?=.*-xyz\b)- 零个或多个字符(但换行符)的正向前瞻,后跟字面上的“-xyz”和单词边界。
    • (?:- 打开非捕获组。
      • -[a-z]+- 匹配连字符后跟至少一个小写字母。
      • ){4}- 关闭非捕获组并匹配4次。
    • )- 关闭第一个捕获组。
  • "- 匹配文字双引号。

我不是 100% 确定您只想允许小写字母,因此您可以在需要时调整该部分。整个模式验证输入值,而您可以使用捕获组一来获取您的密钥。


在此处输入图像描述


使用新信息编辑问题后更新:

Prometheus 在所有正则表达式中都使用了 RE2 引擎。因此,由于环视,上述建议将不起作用。对 OP 的限制较少但可能的答案可能是:

\bkey="(abcd(?:-\w+)*-xyz(?:-\w+)*)"

查看在线演示

于 2020-07-15T06:43:03.467 回答
0

您可以使用以下正则表达式来验证字符串是否具有所需的格式并匹配字符串中感兴趣的部分。

(?<=\bkey=")(?=.*-xyz(?=-|$))abcd(?:-[a-z]+)+(?=")

启动你的引擎!

请注意,没有捕获组。

正则表达式引擎执行以下操作。

(?<=\bkey=")  : positive lookbehind asserts the current
                position in the string is preceded by 'key=' 
(?=           : begin positive lookahead
  .*-xyz      : match 0+ characters, then '-xyz'
  (?=-|$)     : positive lookahead asserts the current position is
              : followed by '-' or is at the end of the string
)             : end non-capture group
abcd          : match 'abcd'
(?:           : begin non-capture group
  -[a-z]+     : match '-' followed by 1+ characters in the class
)+            : end non-capture group and execute it 1+ times
(?=")         : positive lookahead asserts the current position is
              : followed by '"'
于 2020-07-15T07:55:05.390 回答
0

这行得通吗?

图案

\bkey="(abcd-[^"]*\bxyz\b[^"]*)"

演示

于 2020-07-15T06:39:35.643 回答