java正则表达式lookahead非捕获但输出它

时间:2014-06-04 09:07:21

标签: java regex lookahead

我正在尝试使用模式\ w(?= \ w)使用以下内容查找2个连续字符, 虽然前瞻工作,我想输出实际匹配但不消耗它

这是代码:

Pattern pattern = Pattern.compile("\\w(?=\\w)");
Matcher matcher = pattern.matcher("abcde");

while (matcher.find())
{
    System.out.println(matcher.group(0));
}

我想要匹配的输出: ab bc cd de

但我只能 a b c d e

任何想法?

1 个答案:

答案 0 :(得分:4)

前瞻的内容宽度为零,因此它不属于组零。要做你想做的事,你需要明确地捕捉前瞻的内容,然后重建组合文本+前瞻,如下所示:

Pattern pattern = Pattern.compile("\\w(?=(\\w))");
//                                       ^   ^
//                                       |   |
//                             Add a capturing group

Matcher matcher = pattern.matcher("abcde");

while (matcher.find()) {
    // Use the captured content of the lookahead below:
    System.out.println(matcher.group(0) + matcher.group(1));
}

Demo on ideone.