regex 从正则表达式中排除组

rqcrx0a6  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(122)

我需要正则表达式来自docker命令的结果。
对于情况1:docker1: mycompany.com:5000/example_1:0.0.2 i应获得3组:
1.组1:docker1
1.组2:example_1
1.第3组:0.0.2
对于情况2:docker2: mycompany.com:5000/example_2 i应获得2组
1.组1:docker2
1.组2:example_2
对于情况3:docker3: mycompany.com:5000/example_3:latest我应该得到3个组,如第一个
1.组1:docker3
1.组2:example_3
1.组3:最新
我使用下面的正则表达式来实现:

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

但是好像我不能在第一和第三个案例中删除第二组
请在following链接中找到我所做的。
请有人指导我如何删除group2(example_1:0.0.2或example_3:latest)?
你好pierre

o3imoua4

o3imoua41#

您可以使用求反字符类编写模式,并注意转义点以按字面意思匹配它。

^([^\n:]*): mycompany\.com:5000\/([^\s:]+)(?::(\d+(?:\.\d+)*|\w+))?$
  • ^字符串开头
  • ([^\n:]*)捕获group 1,匹配除:以外的任意字符或换行符
  • : mycompany\.com:5000\/匹配: mycompany.com:5000/
  • ([^\s:]+)捕获组2,匹配1+次非空白字符,不包括:
  • (?:备选方案的非捕获组
  • :按字面匹配
  • (捕获组3
  • \d+(?:\.\d+)*匹配1+位数字,并可选择重复.和1+位数字
  • |
  • \w+匹配1+单词字符
  • )关闭组
  • )?关闭非捕获组并使其可选
  • $字符串结束

Regex demo
或者稍微短一点:

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

Regex demo

相关问题