Регулярное выражение, соответствующее более чем двум элементам Java - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь сопоставить два или более слов в строке.Строка My/word example/word Я хочу извлечь My example.что я сделал до сих пор:

        String test = "My/word example/word";
        Pattern pattern = Pattern.compile("((.*)\\/word){2,}");
        Matcher match = pattern.matcher(test);
        if (match.find()) {

                System.out.println(match.group(1));
            }

Но он печатает только example/word, есть идеи?

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Если у вас есть какое-либо повторение с группой захвата, оно будет захватывать только финальный матч этой группы. Лучшим вариантом здесь было бы упростить регулярное выражение, чтобы оно соответствовало только одному слову, а затем повторно используйте match.find(), пока не найдете соответствие:

String test = "My/word example/word";
Pattern pattern = Pattern.compile("(\\w+)/word");
Matcher match = pattern.matcher(test);
while (match.find()) {
    System.out.println(match.group(1));
}

Нетрудно добавить здесь логику для печати, только если вы нашли два или более совпадений.

Также обратите внимание, что я немного изменил ваше регулярное выражение, передние косые черты не нужно экранировать, и я заменяю .* на \w+, что должно быть лучше, потому что вы не будете жадно совпадать до самого последнего /word.

1 голос
/ 15 марта 2012

Вы можете использовать пассивную группу для части /word и выполнить итерацию по сопоставленным результатам, чтобы построить окончательную строку.

String test = "My/word example/word";
Pattern pattern = Pattern.compile("(\\w*)(?:\\/word)");
Matcher match = pattern.matcher(test);
String result = "";
while (match.find()) {
    result += match.group(1) + " ";
}

System.out.println(result.trim());

Вывод будет:

My example
0 голосов
/ 15 марта 2012

Возможно, вы используете неправильный номер группы?Я думаю, что он вернет результат, который вы ищете, если вы используете group(2)

0 голосов
/ 15 марта 2012

Вы можете использовать не жадный * -оператор:

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