是否可以编写一个正则表达式,它在.java文件中提取包路径?
这样的事情:
package java.awt.event;
// java code
到这个
java.awt.event
我可以解析到文件夹位置?
java/awt/event/
我不知道包可以包含哪些字符,或者是否可以添加多个包。
答案 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]+$))