java - 用于匹配 Java 方法签名的正则表达式

标签 java regex string parsing

我有这个特殊的要求,其中必须通过不同组件的不同正则表达式来标识方法。例如,需要有一个用于返回参数的正则表达式,一个用于方法名称的正则表达式,一个用于参数类型的正则表达式,一个用于参数名称的正则表达式。直到这一步我才能够想出一个表达式,如下 -

([^,]+) ([^,]+)\((([^,]+) ([^,]+))\)

它非常适合像 - 这样的方法签名

ReturnType foo(Arg parameter) The regular expression identifies ReturnType, foo, Arg and parameter separately.

现在的问题是,一个方法可以没有/一个/多个参数,并用逗号分隔。我无法为此得到重复的表达。我们将不胜感激。

最佳答案

让我们稍微抽象一下,假设我们要匹配一个(可能是空的)以逗号分隔的数字列表。

(empty)
12
12,34
12,34,56

因此该模式是

^$|^\d+(,\d+)*$

现在您可以尝试替换组件以匹配您想要的内容:

  • 而不是 \d+ ,无论您使用什么正则表达式来匹配类型名称和标识符
  • 也许允许 \s*逗号周围
  • 也许您甚至可以添加特殊的可变参数最后一个参数(也可以是第一个也是唯一一个)

请注意,如果您允许泛型类型参数,那么您绝对不能使用正则表达式,因为您可以嵌套 <...>并且任意深度的平衡括号的语言是不规则的。

尽管您可能会说,在实践中,没有人会将类型参数嵌套得更深,例如 3 层,因此它再次变得常规。

也就是说,一个合适的解析器确实是最好的工具。只需在 ANTLR 中查找 Java 语法的实现即可。

<小时/>

另请参阅

关于java - 用于匹配 Java 方法签名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007139/

相关文章:

java - 使用 JAX-RS 将 java 对象编码到 JSON 添加空属性

python - 正则表达式将一个巨大的字符串分割成多组键值对

C++ 构造函数不会传递字符串 - 未定义构造函数

C# 字符串拆分 - 无结束分隔符

Java 将属性和值附加到现有 XML

java - 使用显式 Intent 时应用程序崩溃

java - 正则表达式匹配某个字符串,直到该字符串下次出现

javascript - 条件正则表达式javascript

java - 如何转换 int 以返回字符串,这就是我们所说的 int

Java 正则表达式