我正在寫一個使用正則表達式的自定義分析器,但我無法弄清楚如何匹配函數。Java正則表達式 - 匹配參數列表
在我的自定義語言功能的一個例子是:
function int add(int num1, int num2){
return num1 + num2;
}
我的分詞器使用正則表達式來獲取下一個令牌,並從早期提供的源代碼字符串中刪除它。這意味着在解析函數時,我可以確定代碼將以函數語句開頭。 我現在有以下表現:
^([\s]*function[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]*\(([\s]*[a-zA-Z][a-zA-Z0-9]*[\s]+[a-zA-Z][a-zA-Z0-9]*[\s]*)*\)[\s]*\{.*\}.*)$
這是很長,但它成功地這兩個功能相匹配:
function void log(string msg){
Console.log(msg);
}
和
function int add(int num1 int num2){
return num1 + num2;
}
我希望能夠分裂用逗號表示參數。
我可以做一個參數後所需的逗號,但隨後的最後 參數應該用逗號結束。
我可以做的逗號可選參數後,但隨後用戶將能夠不把逗號英寸
我需要能夠只需要參數之間的逗號,否則它會在稍後搞亂我的解析器。 如何編輯我的表達式以查找參數之間的逗號?
非常感謝您的時間。
你能準確的告訴我你想在哪個函數中添加逗號。 –
忘記它。您可以使用正則表達式將單個令牌拉出字符串,但我甚至不會嘗試使用正則表達式分析整個結構。首先,無法使用正則表達式來分析可變數量的參數並提取所有信息。 – ajb
我只想匹配'(int num1,int num2)'。這只是'\(([\ s] * [a-zA-Z] [a-zA-Z0-9] * [\ s] + [a-zA-Z] [a-zA-Z0-9] * [\ S *)* \)'。我需要檢查參數是否用逗號分隔。 –