Java 如何从响应中提取字符串?

Java 如何从响应中提取字符串?,java,Java,我已经在谷歌上搜索过这件事了。我只想从这个响应中提取这些字符串192.168.90.20,80,5225和96656 答复是: Ready 192.168.90.20:80 1.1 YID 5225 PID 96656 Connected 我使用了这个代码,但不起作用 public static final Pattern myPat1 = Pattern.compile("Ready (.+):(.+))",Pattern.CASE_INSENSITIVE); publi

我已经在谷歌上搜索过这件事了。我只想从这个响应中提取这些字符串
192.168.90.20
80
5225
96656

答复是:

Ready 192.168.90.20:80 1.1
YID 5225 PID 96656
Connected
我使用了这个代码,但不起作用

public static final Pattern myPat1 = Pattern.compile("Ready (.+):(.+))",Pattern.CASE_INSENSITIVE);
public static final Pattern myPat2 = Pattern.compile("YID (.+) PID (.+))",Pattern.CASE_INSENSITIVE);

Matcher matcher1 = myPat1.matcher(response);
Matcher matcher2 = myPat2.matcher(response);

if (matcher1.matches()) {
    System.out.println(matcher1.group(1));
    System.out.println(Integer.parseInt(matcher.group(2));
} else {
    System.out.println("Error");
}

if (matcher2.matches()) {
    System.out.println(matcher2.group(1));
    System.out.println(matcher2.group(2));
} else {
    System.out.println("Error");
}

以下内容适合我

String response = """
        Ready 192.168.90.20:80 1.1
        YID 5225 PID 96656
        Connected""";
System.out.println(response);
Pattern pattern = Pattern.compile("([\\d.:]+)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(response);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}
输出为:

Ready 192.168.90.20:80 1.1
YID 5225 PID 96656
Connected
192.168.90.20:80
1.1
5225
96656
代码使用


请注意,方法
匹配
尝试匹配整个字符串,而方法
查找
搜索字符串中模式的下一个匹配项。每次调用
find
,它都会从上一个匹配的末尾开始搜索。

什么不起作用?它没有提取192.168.90.20、80、5225和96656“它不起作用”是相当模糊的。您的输出是否总是采用这种格式?数字(长度)的大小是否总是相同的?通常,当你说它不起作用时,请给出一些上下文。什么不起作用?您是否有一些错误消息,或者您的输出是什么,预期输出是什么?如果是由于您的正则表达式,请尝试此操作。这将使您的任何给定ip地址与端口匹配。这是你的端口后面的版本吗?1.1正则表达式不会也验证102042.21421412.212.3232:900作为有效的IP地址吗?@Alex我刚刚回答了问题。除此之外,我在问题中没有提到验证IP地址。