Можно ли написать регулярное выражение для извлечения пакета Java? - PullRequest
2 голосов
/ 11 октября 2011

Можно ли написать регулярное выражение, извлекающее путь к пакету в файле .java?

Примерно так:

package java.awt.event;
// java code

к этому

java.awt.event

что я могу разрешить в папку?

java/awt/event/

Я не знаю, какие символы может иметь пакет, или возможно ли добавить более одного пакета.

Ответы [ 4 ]

10 голосов
/ 11 октября 2011
"package\\s+([a-zA_Z_][\\.\\w]*);"

В начале файла Java может быть только один пакет.Только слово символы и "."разрешены.

"package\\s+" => the work "package" followed by at least one space
"("           => start of capture
"[a-zA-Z_]"   => first character of package (doesn't include numeric digits)
"[\\.\\w]*"   => any number of word characters (a-zA-Z0-9_) plus the "." character
")"           => end of capture
";"           => end of line

На самом деле это не самый лучший вариант, поскольку он не гарантирует, что первый символ каждой папки не будет цифрой, однако он будет работать без соблюдения правил.В этом случае следующее может быть проще:

"package\\s+([\\w\\.]+);"
2 голосов
/ 11 октября 2011

вы можете иметь только 1 объявление пакета, и допустимый синтаксис такой же, как у нормальных идентификаторов

"package ([\\w&&\\D]([\\w\\.]*[\\w])?);"

группа захвата 1 заменит пакет. с разделителями файлов, и вы там

1 голос
/ 05 февраля 2013

Это регулярное выражение прекрасно работает:

package\\s([a-zA-Z]\\w*)(\\.[a-zA-Z]\\w*)*;"\

для соответствия:

  • "пакет"
  • пробел
  • определение пакета, начинающееся снецифровый символ
  • любое определение субпакета
  • ";"
0 голосов
/ 11 марта 2016

Я знаю, что это откладывается, но я хотел бы внести в этот проект то, что я сделал, что достаточно хорошо работает специально для соглашения об именах пакетов Android.

  (^[a-z]+[.][a-z]+[.][a-z]+($|[.][a-z]+$))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...