DayDayHappy
DayDayHappy

Reputation: 1679

java regular expression lookahead non-capture but output it

i am trying to use the pattern \w(?=\w) to find 2 consecutive characters using the following, although lookahead works, i want to output the actual matched but not consume it

here is the code:

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

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

i want the matching output: ab bc cd de

but i can only get a b c d e

any idea?

Upvotes: 4

Views: 449

Answers (1)

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726479

The content of the lookahead has zero width, so it is not part of group zero. To do what you want, you need to explicitly capture the content of the lookahead, and then reconstruct the combined text+lookahead, like this:

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.

Upvotes: 4

Related Questions