Java 用正则表达式解析docker图像

Java 用正则表达式解析docker图像,java,regex,pattern-matching,Java,Regex,Pattern Matching,好的,我试着用正则表达式解析一些docker图像。 我有一个字符串列表,每个字符串如下所示: bamos/openface 12周前最新62d1673065e8 1.941 GB 在哪里 bamos/openface-->存储库 最新-->标记 62d1673065e8-->映像ID 12周前-->创建 1.941 GB-->大小 我要做的是检查字符串中是否同时包含“bamos/openface”和“Latest”。所以基本上我需要检查一个特定的存储库和它的标签。如果字符串确实包含它们,那么

好的,我试着用正则表达式解析一些docker图像。 我有一个字符串列表,每个字符串如下所示:

bamos/openface 12周前最新62d1673065e8 1.941 GB

在哪里

  • bamos/openface-->存储库
  • 最新-->标记
  • 62d1673065e8-->映像ID
  • 12周前-->创建
  • 1.941 GB-->大小
我要做的是检查字符串中是否同时包含“bamos/openface”和“Latest”。所以基本上我需要检查一个特定的存储库和它的标签。如果字符串确实包含它们,那么我必须在单独的字符串中检索(图像ID)


如何为此设置模式匹配?

您只需在模式中添加字符串以测试匹配,并在如下组中捕获图像ID:

^bamos\/openface\h+latest\h+([a-z0-9]+)

如果字符串匹配,您的图像id将在组1中可用。请参见下面的代码示例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String regex = "^bamos\\/openface\\h+latest\\h+([a-z0-9]+)";
String string = "bamos/openface       latest       62d1673065e8       12 weeks ago       1.941 GB\n"
     + "other/repository       latest       22d1673065e8       12 weeks ago       1.941 GB\n"
     + "bamos/openface       previous       77d1673065e8       12 weeks ago       1.941 GB";

Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);

while (matcher.find())
    System.out.println(matcher.group(1));
此示例输出第一个图像的图像id


太完美了。非常感谢你@Niitaku!regex101网站是学习正则表达式的好地方。@73是。:)但是要小心:在这里,只使用
if(matcher.find())
效果很好,因为只有一个可能的匹配。如果你同时测试你的行,在时考虑使用<代码>。我正在更新我的答案。