需要使用正则表达式解析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。需要只识别所有类和&与给定行相关联的接口。
我的正则表达式中有什么不正确。 提前致谢
答案 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*\\{.*$