gpt4 book ai didi

正则表达式:忽略捕获组的顺序并仅捕获最后一次出现

转载 作者:行者123 更新时间:2023-12-04 03:24:28 32 4
gpt4 key购买 nike

假设我们有以下字符串:

1|order=asc|type=1

我们需要创建将其解析为参数的正则表达式,假设字符串始终应以数字开头,并且(可选)具有任意顺序的参数(order,asc)。它也可能有 3 个或更多参数,但为了简单起见,我们在这里保留 2 个。例如,这些是正则表达式将理解的字符串:

1
1|order=asc|type=1
1|type=1|order=asc

我有以下表达式来完成这项工作:

(?<id>^\w+)((?:\|type=(?<type>\w+))|(?:\|order=(?<order>\w+))){0,2}

这是 demo链接到我的正则表达式

但问题是它允许重复。

如果我们有以下字符串,它将根本不匹配 order 参数:

1|type=1|type=2|order=asc

理想情况下,我们应该从上面的正则表达式中得到以下组:

  • id:1
  • type:2(因为它应该捕获最后一次出现)
  • 顺序:升序

最佳答案

你可以使用

^(?<id>\w+)(?:\|(?:type=(?<type>\w+)|order=(?<order>\w+)))*$

参见 regex demo .

详细信息:

  • ^ - 字符串开始
  • (?<id>\w+) - 组“id”:一个或多个字符
  • (?:\|(?:type=(?<type>\w+)|order=(?<order>\w+)))* - 零次或多次重复
    • \| - 一个 |字符
    • (?:type=(?<type>\w+)|order=(?<order>\w+)) - 两者之一
      • type=(?<type>\w+)| - type=文本,然后是捕获一个或多个单词字符的组“类型”,然后是 OR 运算符
      • order= - 文本 order=然后
      • (?<order>\w+) - 组“顺序”:一个或多个单词字符
  • $ - 字符串结束。

(?:...)* 中的捕获组重复组将在每次捕获字符串时继续重写组值,因此将保留最后一次出现的值。

您可以通过在第二个非捕获组中添加更多组来增强此正则表达式。例如,添加 numstatus就这么简单

^(?<id>\w+)(?:\|(?:type=(?<type>\w+)|order=(?<order>\w+)|num=(?<num>\d+)|status=(?<status>\w+)))*$

参见 this regex demo .

关于正则表达式:忽略捕获组的顺序并仅捕获最后一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67872435/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com