私は与えられたコードでメソッド呼び出しを探したい。だから私は区切り記号としてセミコロンでコードを分割しています。ですから、私は与えられたコードで呼び出されたメソッドの名前を見つけることに興味があります。メソッドの呼び出しパターンと一致する正規表現が必要です。助けてください!!正規表現のメソッド呼び出しを見つける
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
{すなわち、この形式で呼び出します:[objectNameに|クラス名] .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
このコードが与えられた問題をどのように解決するかについての何らかの記述を追加することは、一般的には良い考えです。そのような説明を追加するには、あなたの答えを[編集]してください。 –
関連する問題
- 1. 最初に出現する正規表現を見つける正規表現
- 2. 正規表現を見つける正規表現
- 3. &&を見つける正規表現&&
- 4. 正規表現を見つける '\ n'
- 5. Windowsのタスクリスト-v出力の正規表現を見つける
- 6. つだけ出現正規表現
- 7. 正規表現の後に値を見つけるための正規表現
- 8. 正規表現を見つけるための正規表現ですか?
- 9. xcodeで正規表現を見つけて置き換える正規表現...?
- 10. C#によるASPマークアップページ内でのメソッド正規表現の呼び出し
- 11. タブのn回目の出現後に値を見つける正規表現
- 12. 見つける正しい正規表現
- 13. 正規表現で2つのパターンを見つける
- 14. コード内のすべてのメソッドを見つけるための正規表現
- 15. (C)関数呼び出しに一致する正規表現
- 16. 変数を使って正規表現のメソッドを呼び出せません。
- 17. メソッドの呼び出し元を見つける
- 18. Cスタイルのブロックコメントを見つけるための正規表現
- 19. キーの値を見つけるための正規表現
- 20. 空のアンカータグを見つけるための正規表現
- 21. 正規表現ファイルのリスト内のクラスを見つける
- 22. 正規表現の一致を見つけるPythonicの方法
- 23. データを見つけるためのSplunkの正規表現
- 24. フレーズを見つけるためのJavaのユーザー正規表現
- 25. Hrefの値を見つけるための正規表現
- 26. 正規表現のすべてのキャプチャグループを見つける
- 27. 正規表現で特定のテキストを見つける
- 28. リンクを見つけるためのPHP正規表現
- 29. クエリと正規表現のデータを見つける
- 30. 正規表現:一致のインデックスを見つける
正しい解決策が必要な場合、答えは実際には不可能です。 – biziclop
実用的であるだけでなく、理論的でさえある。 Java(言語)は通常の言語ではないため、正規表現では解析できません。同意した; –
;これは信じられないほど乱雑です。あなたはインスタンス化された関数呼び出しと関数呼び出しを一致させる必要がありますが、関数定義は一致させる必要があります。また、関数呼び出しでネストされた関数呼び出しではどうしますか? 'map.get(map.get(123))'?ああ。 – beerbajay