Java正则表达式中的前瞻非捕获但输出它

4
我正在尝试使用模式\w(?=\w)来查找两个连续的字符,代码如下, 虽然前瞻起作用了,但我想输出实际匹配但不消耗它。
以下是代码:
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个回答

4

向前查看的内容宽度为零,因此它不是0组的一部分。要实现您想要的效果,您需要明确地捕获向前查看的内容,然后重构组合的文本和向前查看,就像这样:

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

ideone上的演示示例。


@DayDayHappy 这样做会导致不给答案点赞(顺便加一):D - Mena
返回翻译后的文本:真。下一次我会按(2n+1)次 - DayDayHappy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接