Регулярное выражение Java с опережением

Есть ли способ распечатать предварительную часть шаблона регулярного выражения в java?

    String test = "hello world this is example";
    Pattern p = Pattern.compile("\\w+\\s(?=\\w+)");
    Matcher m = p.matcher(test);
    while(m.find())
        System.out.println(m.group());

этот фрагмент распечатывает:

привет
мир
это
это

то, что я хочу сделать, это напечатать слова как пары:

привет мир
мир это
это
это пример

Как мне это сделать?


person aykut    schedule 02.04.2011    source источник


Ответы (1)


Вы можете просто поместить фиксирующие круглые скобки внутри выражения просмотра вперед:

String test = "hello world this is example";
Pattern p = Pattern.compile("\\w+\\s(?=(\\w+))");
Matcher m = p.matcher(test);
while(m.find()) 
    System.out.println(m.group() + m.group(1));
person Tim Pietzcker    schedule 02.04.2011
comment
Хороший. Я собирался предложить \w+\s(?=(\w+))\1 без изменения кода Java, но это потребляет группу захвата... - person flow2k; 12.03.2019