在java中查找所有带regex的主机帖子

时间:2016-07-29 08:08:34

标签: java regex

我有一串带端口的主机,比如“abs:1025,abs:1000,bca:1024”。 如何在“abs”之后找到所有可能的端口? 这是我到目前为止所尝试的

String hostName = host.substring(0, host.indexOf(":"));
String pattern = hostName +":([0-9]+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(javaNamingProviderUrl);
if(m.find()){
  hostAnyPort = m.group(1);
}

我只有一个可能的主机(1025),但我需要1025和1000.我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

重点是您需要遍历所有匹配项,将if替换为while。见the Java demo

String host = "abs:1025, abs:1000, bca:1024";
String hostName = host.substring(0, host.indexOf(":"));
String pattern = hostName +":([0-9]+)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(host);
while(m.find()){
  System.out.println(m.group(1));
}

请注意,如果您的主机名已知,则可以使用以下格式对其进行硬编码:pattern = "abs:([0-9]+)"。如果它可以包含特殊字符(尽管不太可能),您将需要使用Pattern.quote(hostName)

此外,由于您没有使用支持Unicode的正则表达式,因此可以将[0-9]替换为\dpattern = hostName +":(\\d+)")。