【问题标题】:Regular expression that matches java method definition匹配java方法定义的正则表达式
【发布时间】: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


【解决方案1】:

(?!if|while|for|catch|do|new|return)^(public\s+|private\s+|protected\s+).+(.)\s{$

试试这个正则表达式进行方法行匹配。如果您不想将匹配行插入

(?!if|while|for|catch|do|new|return)

这个块。

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 2010-09-09
    • 2011-03-30
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多