gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:32:19 28 4
gpt4 key购买 nike

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

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

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

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com