我有一串带端口的主机,例如“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);
}
我只得到 1 个可能的主机 (1025),但我需要 1025 和 1000。我的错误在哪里?
最佳答案
要点是你需要遍历所有匹配项,将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+)"
).
关于java - 在 java 中查找所有带有正则表达式的主机帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38653692/