是否可以编写正则表达式来提取java包?

时间:2011-10-11 19:03:27

标签: java regex package

是否可以编写一个正则表达式,它在.java文件中提取包路径?

这样的事情:

package java.awt.event;
// java code

到这个

java.awt.event

我可以解析到文件夹位置?

java/awt/event/

我不知道包可以包含哪些字符,或者是否可以添加多个包。

4 个答案:

答案 0 :(得分:10)

"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\\.]+);"

答案 1 :(得分:2)

您只能拥有1个包声明,并且允许的语法与普通标识符相同

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

捕获组1将包替换掉。使用文件分隔符,你就在那里

答案 2 :(得分:1)

这个正则表达式非常有效:

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

匹配:

  • “包”
  • 空白
  • 以非数字字符开头的包定义
  • 任何子包定义
  • “;”

答案 3 :(得分:0)

我知道这是延迟的,但我想提供一个我制作的,它适用于Android包名称约定。

  (^[a-z]+[.][a-z]+[.][a-z]+($|[.][a-z]+$))