Пользователь Regex в Java, чтобы найти фразы - PullRequest
1 голос
/ 20 февраля 2012

Привет. Я пытаюсь найти фразы в строке с помощью регулярных выражений. У меня есть следующий код: похоже, он не находит все два словосочетания.

public static void main(String[] args) {
    String inputText = "test and test Test hello hello hello test test hello hello ";

    //Pattern pattern = Pattern.compile("((\\w{3,}?)\\W(\\w{3,}?)\\W).*\\2\\W\\3", Pattern.CASE_INSENSITIVE);

    Pattern twoWordPrasePattern = Pattern.compile("(([a-zA-Z]{3,})\\W([a-zA-Z]{3,})\\W).*\\2\\W\\3", Pattern.CASE_INSENSITIVE);

    Matcher matcher = twoWordPrasePattern.matcher(inputText);       
    while (matcher.find()) {

        System.out.println(inputText.substring(matcher.start(), matcher.end()));

        System.out.println(matcher.group(1));

    }

}

Я борюсь с этим, почему группа hello hello не выходит на улицу? Спасибо за помощь Как я могу изменить шаблон, чтобы найти все фразы? Ричард

1 Ответ

3 голосов
/ 20 февраля 2012

matcher.find() всегда выполняет поиск с того места, где остановилось предыдущее совпадение. Первый звонок находит это:

test Test hello hello hello test test

так что все, что осталось для поиска, это

hello hello 

в конце. Этот конечный hello hello не соответствует вашему шаблону (поскольку в нем всего два слова, а вашему шаблону требуется как минимум четыре слова: он захватывает два слова как группы 2 и 3, а затем находит \2\W\3 позже ), поэтому он не получает вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...