正则表达式解析Java中的类声明行

时间:2012-01-03 05:23:38

标签: java regex

需要使用正则表达式解析Java中的Class声明行,例如

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);

但是这个正则表达式无法解析classname / extender classname / implementer clas-name。需要只识别所有类和&与给定行相关联的接口。

我的正则表达式中有什么不正确。 提前致谢

3 个答案:

答案 0 :(得分:0)

您没有解释您的错误消息,因此可能会有更多,但我看到一个问题:对于继承捕获,您捕获的是一个字符的多个组。

您应该在该区域中使用([\\w,]+)来获取已实现接口的列表。否则我建议使用它来单独获取每个:(\\w+)(?:,\\s*(\\w+))*

我认为可能还有其他微妙的错误。这取决于你所看到的以及你期望看到的东西。

答案 1 :(得分:0)

你的正则表达式的最后一部分并没有抓住这个动作。

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

它抓住了ActionHandler,然后死了,因为它正在寻找下一个大括号。 这是我下面的例子,我将最后的\ w放入方括号并添加了\ s以捕获任何空格,这样它也会捕获行尾的“Action”。

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

看看它是否适合你。

答案 2 :(得分:0)

对于通用类(带有<...>) 使用:

.*class\\s+(\\w+)(\\s+extends\\s+(\\w+))?(\\s+implements\\s+([\\w,\\s]+))?(<[\\w,\\s]+>)?\\s*\\{.*$