【发布时间】:2018-05-03 09:27:54
【问题描述】:
我正在尝试在文件中查找带有方法定义的行。 例如,该行是:
// line has TAB indent
public Stream<JsonNode> requestDifferences(List<Integer> commitIds) {
我尝试使用的正则表达式是:
"^.+(!?if|while|for|catch|do|new|return).+\\(.*\\)\\s\\{$"
上面的示例行匹配正则表达式。但是所有包含匿名类、条件、循环和返回语句的字符串也成功匹配上面的正则表达式。
这个表达式有什么问题?
【问题讨论】:
-
如果您要匹配替代组中没有单词的行,您应该将其写为
"^(?!.*\\b(?:if|while|for|catch|do|new|return)\\b).+\\(.*\\)\\s*\\{$"- 但使用单个正则表达式解析代码并不是一个好主意。跨度> -
解决这个问题的正则表达式方法可能会在未来造成伤害。考虑使用真正的解析器:javaparser.org
-
我也不喜欢使用单个正则表达式解析代码的想法。但是,为什么不搜索以 public/private 标签开头的行呢?这将显着减少匹配
-
但是如果该行是类定义或方法具有包私有范围(没有关键字)怎么办?
-
Javaparser 可以解析一行吗?因为我正在从 Bitbucket 检索提交的差异 - 每个代码行都在单独的 json-array 元素中返回。
标签: java regex methods definition