java - 在 Java 正则表达式中获取多个模式的重叠匹配

标签 java regex

我遇到了与 this link 相同的问题

但具有多种模式。我的正则表达式是这样的:

Pattern word = Pattern.compile("([\w]+ [\d]+)|([\d]+ suite)|([\w]+ road)");

如果我的示例文本是,

XYZ Road 123 Suite

我的愿望输出是,

XYZ Road 123

123 suite

但是我越来越

XYZ Road 123

仅。

提前致谢!

最佳答案

您可以尝试以下使用正向先行断言的正则表达式。

(?=(\b\w+ Road \d+\b)|(\b\d+ suite\b))

DEMO

String s = "XYZ Road 123 Suite";
Matcher m = Pattern.compile("(?i)(?=(\\b\\w+ Road \\d+\\b)|(\\b\\d+ suite))").matcher(s);
while(m.find())
{
    if(m.group(1) != null) System.out.println(m.group(1));
    if(m.group(2) != null) System.out.println(m.group(2));
}

输出:

XYZ Road 123
123 Suite

关于java - 在 Java 正则表达式中获取多个模式的重叠匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656377/

相关文章:

regex - 最大周期子串的正则表达式

c# - C# 中的替换和 Java 中的 replaceAll

javascript - 简化正则表达式 : Avoid both test and replace

java - 使用 getResource 在 java 中无法读取输入图像

java - 尝试使用 java/android 从 url 流获取元数据时出错

php - 验证澳大利亚 DVA 号码(长度可能可变)

Java 字符串用 "."(点)分割

java - 使用java nio删除文件

java - 为什么类图不包括所有类?

java - 使用反射迭代对象的集合属性