[英]Regular Expression to parse Class declaration line in Java
需要使用正则表达式解析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);
但是此正则表达式无法解析类名/扩展类名/实现器类名。 只需要标识与给定行关联的所有类和接口。
我的正则表达式中有什么错误。 提前致谢
对于泛型类(带有<...>
),请使用:
.*class\\s+(\\w+)(\\s+extends\\s+(\\w+))?(\\s+implements\\s+([\\w,\\s]+))?(<[\\w,\\s]+>)?\\s*\\{.*$
您不是在解释错误消息,所以可能还会有更多错误消息,但是我看到一个问题:对于继承捕获,您正在捕获一个字符的许多组。
您应该在该区域中使用([\\\\w,]+)
来获取已实现接口的列表。 否则,我建议使用此方法分别获取每个: (\\\\w+)(?:,\\\\s*(\\\\w+))*
我认为可能还有其他细微的错误。 这取决于您看到的内容和期望看到的内容。
正则表达式的最后一部分是不掌握操作的方法。
(\\s+implements\\s+(\\w|,)+)?\\{.*$
它抓住了ActionHandler,然后死了,因为它接下来正在寻找大括号。 在下面的示例中,我将最后一个\\ w放在方括号中,并添加\\ s来也捕获任何空格,这样,它也将捕获行尾的“ Action”。
(\\s+implements\\s+([\\w,\\s]+))?\\s*\\{.*$
看看是否适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.