java - 在 java 中查找所有带有正则表达式的主机帖子

标签 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);
}

我只得到 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/

相关文章:

java - 确定此 REST 应用程序背后的工具?

java - 您最喜欢 Java API 的哪个领域?

regex - 在 Perl 中使用正则表达式对行进行排序

JavaScript 正则表达式三部分

可选包装器的 JavaScript RegExp 和只有一个记住的部分?

java - 基于图 block 的游戏中的重复图 block

java - 如何在 Java 的 Lambda API 中构建复制函数的映射

python - 多行字符串解析

java - AutoCompleteTextView 结果空间为空

正则表达式环绕引号