使用一个正则表达式查找两个子字符串
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
外部应用发送以下行:
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