正则表达式解析码头工人标签?

Ste*_*ice 4 regex

'registry/rabbit',
'registry/rabbit:3',
'rabbit',
'rabbit:3'
Run Code Online (Sandbox Code Playgroud)

试图提出一个正则表达式,将rabbit在上述四种情况下匹配。似乎很容易,但是我的正则表达式使我失望。

Joe*_*and 5

格式指定得有点少,但这似乎可行:

^(?:(?=[^:\/]{1,253})(?!-)[a-zA-Z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-))*(?::[0-9]{1,5})?/)?((?![._-])(?:[a-z0-9._-]*)(?<![._-])(?:/(?![._-])[a-z0-9._-]*(?<![._-]))*)(?::(?![.-])[a-zA-Z0-9_.-]{1,128})?$
Run Code Online (Sandbox Code Playgroud)

文档

映像名称由斜杠分隔的名称组成,可以选择以注册表主机名作为前缀。主机名必须符合标准DNS规则,但不得包含下划线。如果存在主机名,则可以选择后跟端口号:8080。如果不存在,则该命令默认使用Docker的公共注册表,该注册表位于Registry-1.docker.io。名称组件可能包含小写字符,数字和分隔符。分隔符定义为一个句点,一个或两个下划线或一个或多个破折号。名称组件不能以分隔符开头或结尾。

标签名称可以包含小写和大写字符,数字,下划线,句点和破折号。标签名称不能以句点或破折号开头,并且最多可以包含128个字符。

测试在这里

  • 我阅读了文档,制作了一些我认为可行的东西,然后针对实际工具测试了我能想到的所有边缘情况。更好的方法是查看源代码以了解如何解析字符串,然后在正则表达式中复制该逻辑。 (2认同)