Регулярное выражение для разбора строки объявления класса в Java - PullRequest
1 голос
/ 03 января 2012

Необходимо проанализировать строку объявления класса в Java с помощью регулярного выражения, например,

String line = "public class ActionDiagramReader extends XReader implements ActionHandler, Action {";
String line  = "public class ActionDiagramReader extends XReader{";

Я пытаюсь использовать это регулярное выражение

String regExp = ".*class\\s+(\\w+)(\\s+extends\\s+(\\w+))?(\\s+implements\\s+(\\w|,)+)?\\{.*$";
Pattern pattern = Pattern.compile(regExp, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher match = pattern.matcher(line1);

Но этому регулярному выражению не удается проанализировать имя класса / расширительимя класса / исполнителя clas-name.Нужно просто определить все классы и интерфейсы, связанные с данными строками.

Что неверно в моем регулярном выражении.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 03 января 2012

Последняя часть вашего регулярного выражения не захватывает действие.

(\\s+implements\\s+(\\w|,)+)?\\{.*$

Он захватывает ActionHandler, а затем умирает, потому что ищет следующую фигурную скобку. В моем примере ниже я заключил заключительные \ w в квадратные скобки и добавил \ s, чтобы также захватывать любые пробелы, таким образом, он также будет захватывать «Действие» в конце строки.

(\\s+implements\\s+([\\w,\\s]+))?\\s*\\{.*$

Посмотрите, работает ли это для вас.

0 голосов
/ 26 сентября 2018

Для общего класса (с <...>) используйте:

.*class\\s+(\\w+)(\\s+extends\\s+(\\w+))?(\\s+implements\\s+([\\w,\\s]+))?(<[\\w,\\s]+>)?\\s*\\{.*$
0 голосов
/ 03 января 2012

Вы не объясняете свои сообщения об ошибках, поэтому их может быть больше, но я вижу одну проблему: для захвата наследования вы захватываете много групп одного символа.

Вы должны использовать ([\\w,]+) вэта область, чтобы получить список реализованных интерфейсов.В противном случае я предлагаю использовать это для получения каждого из них по отдельности: (\\w+)(?:,\\s*(\\w+))*

Я думаю, что могут быть и другие тонкие ошибки.Это зависит от того, что вы видите и чего ожидаете увидеть.

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