繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM