我有一串带端口的主机,比如“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.我的错误在哪里?
答案 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]
替换为\d
(pattern = hostName +":(\\d+)"
)。