Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于测试docker映像名是否以注册表作为前缀的正则表达式?_Java_Regex_Docker_Docker Registry - Fatal编程技术网

Java 用于测试docker映像名是否以注册表作为前缀的正则表达式?

Java 用于测试docker映像名是否以注册表作为前缀的正则表达式?,java,regex,docker,docker-registry,Java,Regex,Docker,Docker Registry,我正在寻找一个正则表达式,它将测试docker映像是否以注册表作为前缀 以下是它应该匹配的内容: docker.io/library/busybox docker.io/library/busybox:latest docker.io/busybox 它不应该做的是: busybox busybox:latest library/busybox library/busybox:latest 使用[^/]+代替*,因为*表示0或更多,而+表示1或更多重复 而[^/]表示任何不是斜杠的字符 还有

我正在寻找一个正则表达式,它将测试docker映像是否以注册表作为前缀

以下是它应该匹配的内容:

docker.io/library/busybox
docker.io/library/busybox:latest
docker.io/busybox
它不应该做的是:

busybox
busybox:latest
library/busybox
library/busybox:latest

使用
[^/]+
代替
*
,因为
*
表示0或更多,而
+
表示1或更多重复

[^/]
表示任何不是斜杠的字符

还有,为什么需要括号?当组匹配时,这些对提取组很有用。如果只需要布尔结果(匹配与否),可以从表达式中删除它们

您编辑了问题,因此以下是我编辑的答案:

[^/]+\.[^/]+/([^/]+/)?[^/]+(:.+)?
说明:

  • [^/]
    :非斜杠的任何字符
  • [^/]+
    :任何不包含斜杠的字符串
  • \。
    :一个点(转义符不表示任何字符)
  • [^/]+
    :任何不包含斜杠或点的字符串
  • [^/]+\.[^/]+/
    :任何以点分隔并以斜杠结尾的字符串(通常为docker.io)
  • ()?
    表示这可能发生0次或1次(可选)
  • (:.+)?
    :可选字符串,由冒号后跟任意字符串组成,但不能为空

那么您要求在
之前显示
/
?或者根本没有
?要查看模式是否“合理”,我们需要一组它的要求。它们是什么?它是否应该匹配
docker.io/library/busybox
(实际上与
busybox:latest
相同)?在这个问题上,你对正则表达式有什么问题?谢谢,你能帮我解释一下吗?