Определение групп захвата в шаблоне регулярных выражений - PullRequest
4 голосов
/ 04 января 2011

Есть ли способ в Java (возможно, с дополнительной библиотекой с открытым исходным кодом), чтобы идентифицировать группы захвата в java.util.regex.Pattern (то есть до создания Matcher)

Пример из документации Java:

Захватывающие группы нумеруются путем подсчета их открывающих скобок слева направо.В выражении ((A) (B (C))), например, есть четыре такие группы:

1         ((A)(B(C)))
2         (A)
3         (B(C))
4         (C)

В принципе должна быть возможность идентифицировать их из (составлено)Pattern.

ОБНОВЛЕНИЕ: Из @Leniel и других стран кажется, что это средство («именованные группы») будет присутствовать в Java 7 в середине 2011 года. Если я не могу дождаться этого, я могу использовать jregex, хотя яЯ не совсем уверен, что такое API.

Ответы [ 2 ]

7 голосов
/ 04 января 2011

Вы можете узнать число групп, создав фиктивный Matcher, например:

Pattern p = Pattern.compile("((A)(B(C)))");
System.out.println(p.matcher("").groupCount());

Если вы хотите фактические подвыражения (((A)(B(C))), (A),и т.д.), то нет, эта информация недоступна.

2 голосов
/ 04 января 2011
...