我需要一個正則表達式,它將匹配給定字符串中的所有方法調用。示例輸入和輸出:method1("key") // outputs method1method1("key").method2("key") // outputs method1, method12method1(method2.key()) // outputs method1, method2我嘗試了以下代碼,String line = "public String = method1(\"param\")";private static Pattern methodCalls = Pattern.compile("[a-zA-Z]+\\([^\\)]*\\)(\\.[^\\)]*\\))?");Matcher mc = methodCalls.matcher(line);while (mc.find()) { System.out.println(mc.group(0)); // expected method1}它僅適用于類型method1("key")函數。
2 回答

GCT1015
TA貢獻1827條經驗 獲得超4個贊
您不能同時提取和驗證。道理很簡單:方法調用包括dyck-languages,而dyck-languages不是正則的,因此你不能通過正則表達式來驗證一些類似dyck的字符串。
但是,如果您已經知道語法是正確的,則可以通過以下正則表達式提取所有方法名稱:
([^\W:.,()\s]+)\s*\(|::([^W:.,()\s]+)
筆記:
為了便于閱讀,我包括了換行符。如果您將它們包含在您的正則表達式中,它將不起作用。請將正則表達式寫成一行。
如果要在 Java 中使用正則表達式,則需要對
\
es 進行轉義)
regex101 example?Ideone example

FFIVE
TA貢獻1797條經驗 獲得超6個贊
此模式在您的問題中找到 3 個方法調用示例 - 只有 3 個示例
private static Pattern methodCalls = Pattern.compile("\\w+[(](?:\"\\w+\"|\\w+\\.\\w+[(][)])[)](?:\\.\\w+[(]\"\\w+\"[)])?");
添加回答
舉報
0/150
提交
取消