使用一个正则表达式查找两个子字符串

Find two substrings using one regex

外部应用发送以下行:

U999;U999;$SMS=;client: John Doe; A$ABC12345;, SHA:12345ABCDE

我需要从中提取 2 个值:John Doe 和 12345ABCDE

现在我可以使用正则表达式分别提取这 2 个值:

(?=client:(.*?);) 为 John Doe (?=SHA:(.*?)$) 对于 12345ABCDE

是否可以使用 Pattern 中的一个正则表达式提取这些值并将它们提取为 2 个值的列表?

您可以使用具有两个捕获组的模式匹配器:

String input = "U999;U999;$SMS=;client: John Doe; A$ABC12345;,  SHA:12345ABCDE";
String pattern = "^.*;\s*client: ([^;]+);.*;.*\bSHA:([^;]+).*$";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
if (m.find()) {
    System.out.println("client: " + m.group(1));
    System.out.println("SHA:    " + m.group(2));
}

这会打印:

client: John Doe
SHA:    12345ABCDE