我想從一個源代碼文件逐一檢索所有的函數定義。最終,我想只檢索所有函數名稱。源文件有以下幾種形式:匹配(基本)函數聲明
#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;
}
你有語言的語法?然後你可以使用[Java編譯器編譯器](https://javacc.java.net/)。 –
@AndyTurner: 不是真的,但它是一個基本的腳本語言,沒有什麼太平凡。它基於C – BullyWiiPlaza