正则表达式,以匹配任何合法java函数声明的格式
正则表达式是我的一个弱点 我正在寻找一种正则表达式或其他技术,它允许我读取任意字符串并确定它是否是有效的java函数 好: 坏的: 代码:正则表达式,以匹配任何合法java函数声明的格式,java,regex,Java,Regex,正则表达式是我的一个弱点 我正在寻找一种正则表达式或其他技术,它允许我读取任意字符串并确定它是否是有效的java函数 好: 坏的: 代码: For String line : lines. { If(line.matches("(public|protected|private)*(/w)*(") } 是否存在这样一个正则表达式,如果它是有效的java函数,它将返回true?取决于您需要它的严格程度,因为它可能会变得相当复杂 Java中方法声明的语法如下所示: : 您必须检查
For String line : lines.
{
If(line.matches("(public|protected|private)*(/w)*(")
}
是否存在这样一个正则表达式,如果它是有效的java函数,它将返回true?取决于您需要它的严格程度,因为它可能会变得相当复杂 Java中方法声明的语法如下所示: : 您必须检查多个修饰符,但不重复同一个修饰符或多个作用域修饰符,以及类型和标识符不是Java关键字之一。开始变得毛茸茸的。。。我怀疑您是否想编写自己的Java解析器
/^\s*(public|private|protected)?\s+(static)?\s+\w+\s+\w+\s*\(.*?\)\s*$/m
匹配项:
- 起跑线
- 任意空白
- 可选范围
- 至少有一个空间
- 可选关键字static
- 至少有一个空间
- java标识符(您应该希望它是类名或文本)
- 至少有一个空间
- java标识符(函数名)
- 开放式paren
- 武断的争论(这里没有检查,因为混乱不堪)
- 不进行惰性匹配
- 关闭paren
- 任意空格
- 行尾
这还远未完成,但应该适合您的需要。您能找一个;在队伍的尽头?你可能还得看看它周围的一排,我现在正在打电话,所以我面前没有消息来源。我将尝试用上面提到的更新方法从内存中调用“任何有效java函数”的一般情况,这很可能无法用regexp完成,因为它需要正确的解析器。您是否对需要识别的内容有任何限制?您是否需要能够检测具有泛型参数或返回类型的方法?如果是这样,您将无法使用正则表达式,因为正则表达式不能用于描述上下文无关语法,这是描述泛型所必需的(也就是说,类型的泛型参数本身可能是泛型类型等等)(
public
、private
或protected
)然后再使用static
指示符。当然,您可以用另一种方式对它们进行编码。BNF会导致这样的结果:/^\s*((public | private | protected | static | final | native | synchronized | abstract | threadsafe | transient)\s+)*)\s*)\s*)\s*)\s*\(([^]*)\)[\w\s,]*?(\{)?\s*?$/gm
它也不检查语义,它只检查语法。
For String line : lines.
{
If(line.matches("(public|protected|private)*(/w)*(")
}
method_declaration
::=
{ modifier } type identifier
"(" [ parameter_list ] ")" { "[" "]" }
( statement_block | ";" )
/^\s*(public|private|protected)?\s+(static)?\s+\w+\s+\w+\s*\(.*?\)\s*$/m