亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式查找任何語言的所有方法調用

正則表達式查找任何語言的所有方法調用

開心每一天1111 2023-04-26 14:30:27
我需要一個正則表達式,它將匹配給定字符串中的所有方法調用。示例輸入和輸出: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


查看完整回答
反對 回復 2023-04-26
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

此模式在您的問題中找到 3 個方法調用示例 - 只有 3 個示例

private static Pattern methodCalls = Pattern.compile("\\w+[(](?:\"\\w+\"|\\w+\\.\\w+[(][)])[)](?:\\.\\w+[(]\"\\w+\"[)])?");


查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號