从正则表达式中排除一个组



我需要来自docker命令的regex结果

对于情形1:docker1: mycompany.com:5000/example_1:0.0.2我应该得到3组:

  1. 组1:docker1
  2. 组2:example_1
  3. 组3:0.0.2

对于情形2:docker2: mycompany.com:5000/example_2,我应该得到2组

  1. 组1:docker2
  2. 组2:example_2

对于情况3:docker3: mycompany.com:5000/example_3:latest,我应该得到3组像第一个

  1. 组1:docker3
  2. 组2:example_3
  3. 组3:最新

我使用以下正则表达式:

^(.*): mycompany.com:5000/((S*):(w+.?w+.?w+)|S*)$

但是我似乎不能删除第1和第3个case的第二组

请在下面的链接中找到我所做的。

请有人指导我如何删除group2 (example_1:0.0.2或example_3:latest)?

您可以使用否定的字符类编写模式,并注意转义点以匹配它。

^([^n:]*): mycompany.com:5000/([^s:]+)(?::(d+(?:.d+)*|w+))?$
  • ^起始字符串
  • ([^n:]*)Capture组1,匹配除:或换行符
  • 以外的任何字符
  • : mycompany.com:5000/匹配: mycompany.com:5000/
  • ([^s:]+)Capture组2,匹配1+次非空白字符,不包括:
  • (?:备选项的非捕获组
    • :Match literal
    • (Capture第3组
      • d+(?:.d+)*匹配1+数字,并可选择重复.和再次1+数字
      • |
      • w+匹配1+字字符
    • )关闭组
  • )?关闭非捕获组并使其为可选
  • $字符串结束

Regex演示

或者更短一点:

^([^n:]*): mycompany.com:5000/([^s:]+)(?::([^s:]+))?$

Regex演示

相关内容

最新更新