我想从源代码文件中单独检索所有函数定义。最终,我只想检索所有函数名称。源文件的形式如下:
#include bla
first_function_name()
{
}
second_function_name(first_parameter, second_parameter)
{
i = 0;
}
请注意,没有访问修饰符和返回类型,这不用于解析 Java 编程语言。
我想通过 regular expression 实现解决方案。到目前为止,我设法匹配函数定义,但是我遇到的问题是正则表达式不仅匹配单个函数,而且还匹配后面的函数。基本上,它不会以右大括号结束。我尝试使用 $
符号,但它也没有结束正则表达式。
我当前使用的正则表达式如下所示:
private static final String FUNCTION_NAME_MATCHER = "[a-zA-Z]\\w*";
private static final String FUNCTION_MATCHER = "(?s)" + FUNCTION_NAME_MATCHER + "[(].*[)].*[\\{]([^\\}]*)?[\\}]";
如何阻止它匹配以下函数?对于上面的示例函数,它应该匹配两次,但它只匹配一次(同时匹配两个函数定义)。
获取匹配函数定义列表的方法如下所示:
public List<String> getMatches()
{
List<String> matchedResults = new ArrayList<>();
Matcher matcher = Pattern.compile(FUNCTION_MATCHER).matcher(sourceFile);
while (matcher.find())
{
String functionDefinition = matcher.group();
String functionName = functionDefinition.split(FUNCTION_NAME_MATCHER)[0];
matchedResults.add(functionName);
}
return matchedResults;
}
最佳答案
试试这个
private static final String FUNCTION_NAME_MATCHER = "([a-zA-Z]\\w*)";
private static final String FUNCTION_MATCHER = "(?s)" + FUNCTION_NAME_MATCHER + "\\([^)]*\\)\\s*\\{[^}]*\\}";
public static List<String> getMatches()
{
List<String> matchedResults = new ArrayList<>();
Matcher matcher = Pattern.compile(FUNCTION_MATCHER).matcher(sourceFile);
while (matcher.find())
{
matchedResults.add(matcher.group(1));
}
return matchedResults;
}
关于java - 匹配(基本)函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321985/