我想在給定的代碼中找到任何方法調用。所以我用分號分隔代碼作爲分隔符。所以最後我有興趣找到在給定代碼中調用的方法的名稱。我需要一個正則表達式來匹配方法調用模式。請幫忙!!找到方法調用的正則表達式
6
A
回答
0
我曾經想知道一個字符串是否包含一個Java方法調用(包括包含非ASCII字符的方法名)。
以下工作對我來說很好,但它也找到構造函數調用。希望能幫助到你。
/**
* Matches strings like {@code obj.myMethod(params)} and
* {@code if (something)} Remembers what's in front of the parentheses and
* what's inside.
* <p>
* {@code (?U)} lets {@code \\w} also match non-ASCII letters.
*/
public static final Pattern PARENTHESES_REGEX = Pattern
.compile("(?U)([.\\w]+)\\s*\\((.*)\\)");
/*
* After these Java keywords may come an opening parenthesis.
*/
private static List<String> keyWordsBeforeParens = Arrays.asList("while", "for", "if",
"try", "catch", "switch");
private static boolean containsMethodCall(final String s) {
final Matcher matcher = PARENTHESES_REGEX.matcher(s);
while (matcher.find()) {
final String beforeParens = matcher.group(1);
final String insideParens = matcher.group(2);
if (keyWordsBeforeParens.contains(beforeParens)) {
System.out.println("Keyword: " + beforeParens);
return containsMethodCall(insideParens);
} else {
System.out.println("Method name: " + beforeParens);
return true;
}
}
return false;
}
1
對於合格呼叫{即調用以這種形式:[對象名|的className] .methodName(..)},我已經使用:
(\.[\s\n\r]*[\w]+)[\s\n\r]*(?=\(.*\))
當不合格的呼叫存在{即,以這種形式調用:methodName(..)},我一直在使用:
(?!\bif\b|\bfor\b|\bwhile\b|\bswitch\b|\btry\b|\bcatch\b)(\b[\w]+\b)[\s\n\r]*(?=\(.*\))
雖然,這也會找到構造函數。
0
File f=new File("Sample.java"); //Open a file
String s;
FileReader reader=new FileReader(f);
BufferedReader br=new BufferedReader(reader); //Read file
while((s=br.readLine())!=null){
String regex="\\s(\\w+)*\\(((\\w+)*?(,)?(\\w+)*?)*?\\)[^\\{]";
Pattern funcPattern = Pattern.compile(regex);
Matcher m = funcPattern.matcher(s); //Matcher is used to match pattern with string
if(m.find()){
System.out.printf(group(0));
}
}
+1
通常增加一些關於這個代碼如何解決給定問題的描述是一個好主意。請[編輯]您的答案以添加此類說明。 – 2017-02-18 18:41:20
相關問題
- 1. 正則表達式查找方法
- 2. 正則表達式找到
- 3. 正則表達式找到
- 4. 找到正則表達式
- 5. intellij想法找到正則表達式
- 6. 正則表達式方法
- 7. 找不到使用正則表達式
- 8. Java的正則表達式:找到正確的正則表達式
- 9. 正則表達式找到C#類和方法名
- 10. 找不到字的正則表達式
- 11. 正則表達式使用正則表達式來找到子字符串
- 12. 在正則表達式中尋找重複模式的方法
- 13. Python化的方式找到一個正則表達式匹配
- 14. 查找正則表達式
- 15. 尋找正則表達式
- 16. 無法找到正確的正則表達式
- 17. 正則表達式找到函數調用php
- 18. 正則表達式找到並用找到的值替換
- 19. 正則表達式找到一提
- 20. 找到與正則表達式排除
- 21. Bash - 找到正則表達式
- 22. 正則表達式找到「../」或「./」
- 23. PHP正則表達式找到@someone
- 24. 正則表達式來找到this.Apple
- 25. 正則表達式來找到全名
- 26. 正則表達式沒有找到
- 27. 在Vim中找到正則表達式
- 28. 正則表達式,找不到匹配
- 29. 找到一個正則表達式
- 30. 如何找到與正則表達式
如果你想要一個正確的解決方案,那麼答案是:這實際上是不可能的。 – biziclop 2012-02-22 21:46:42
不僅實用,而且甚至是理論上的。 Java(語言)不是常規語言,因此它不能被正則表達式解析。 – 2012-02-22 21:49:13
同意;這是令人難以置信的混亂。您必須匹配:實例上的裸函數調用和函數調用,而不是函數定義。另外,你將如何處理嵌套在函數調用中的函數調用,例如'map.get(map.get(123))'?啊。 – beerbajay 2012-02-22 21:51:50