###前提・実現したいこと
JavaでコードをString型で読み込み、PatternとMatcherを使ってそのソースコード内で定義されたreturnを持つメソッド名を取得するプログラムを作成しています。
正規表現でメソッド名を取得できるようにしたいです。
例)
・メソッド名を取得するメソッド
/**
* メソッド名の取り出し
* @param code ソースコード
* @return methodList メソッド名のリスト
*/
public static ArrayList<String> getCheckMethod(String code){
String word2 = "正規表現";
Pattern p = Pattern.compile(word2);
Matcher m = p.matcher(code);
ArrayList<String> methodList = new ArrayList<String>(); while(m.find()){ String methodName = m.group().toString(); methodList.add(methodName); } System.out.println(methodList); return methodList; }
・読み込んだString型のJavaコード
public class Test {
public static String HelloMsg(){
String msg = "Hello";
return msg;
}
public static String morningMsg(){
return "Goodmornig!";
}
}
・取得したい部分
HelloMsg, morningMsg
###発生している問題・エラーメッセージ
現段階として、まず上の例で
[ static String HelloMsg(){
String msg = "Hello";
return,static String morningMsg(){
return]
までを取得する正規表現を考えているのですが、うまくいきません。
※[,]はArrayListの標準出力
###試したこと
code: String型のJavaコード
word2: 正規表現
word2の値で試した方法
1.「 .\(.\)\s*\{[\S\s]*return」
・標準出力の結果
[ static String HelloMsg(){
String msg = "Hello";
return msg;
}
public static String morningMsg(){ return]
・問題点
途中のreturnを飛ばして、一番最後のreturnまでを取得してしまう。
2.「 .\(.\)\s*\{[^(return)]*return」
・標準出力の結果
[ static String morningMsg(){
return]
・問題点
メソッド名の次の行にreturnがないと取得できない(HelloMsgはメソッド名の3行目にreturnが存在)
回答1件
あなたの回答
tips
プレビュー