Любой знает, какая группа в регулярном выражении действительно выполняет соответствующую работу - PullRequest
3 голосов
/ 04 февраля 2010

Скажи, что у меня есть регулярное выражение, например: {"(группа 1) | (группа 2) (группа 3) | .... (группа n)"} чтобы сопоставить входной объект String, если он совпадает успешно, как я могу узнать, какая группа из вышеуказанных n групп фактически соответствует этому объекту String? Я использую regex lib в java.util. Спасибо, ребята.

Ответы [ 2 ]

3 голосов
/ 04 февраля 2010

Вот способ:

import java.util.regex.*;

public class Test {
    public static void main(String[] args) {
        String text = "12 ab ^&";
        String regex = "(\\d+)|([a-z]+)|(\\p{Punct}+)";
        Matcher m = Pattern.compile(regex).matcher(text);
        while(m.find()) {
            System.out.println("\nmatched text: "+m.group());
            for(int i = 1; i <= m.groupCount(); i++) {
                System.out.println("   group "+i+"? "+(m.group(i) != null));
            }
        }
    }
}

выход:

matched text: 12
   group 1? true
   group 2? false
   group 3? false

matched text: ab
   group 1? false
   group 2? true
   group 3? false

matched text: ^&
   group 1? false
   group 2? false
   group 3? true
2 голосов
/ 04 февраля 2010

Вы можете использовать методы объекта Matcher, чтобы увидеть, какие группы соответствуют. Вот пример:

import java.util.regex.*;

class RegexExample
{
    public static void main(String[] args) {
        String input = "foo baz bar foo";

        String regex = "(foo)|(bar)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            for (int i = 1; i <= matcher.groupCount(); ++i) {
                if (matcher.group(i) != null)
                {
                    System.out.println("Group " + i + " matched.");
                }
            }
        } 
    }
}

Выход:

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