2014-10-16 2 views
1

Я хочу определить java-методы, как строка public native void TextTransArgs(int i, boolean flag, String s). Кроме того, я хочу извлечь имя метода, тип, тип возвращаемого и тип (-ы) типа args. Так как писать регулярное выражение?Как написать регулярное выражение java для идентификации java-функций?

public static void main(String[] args) { 
    Pattern pattern = Pattern.compile("(public|private|protected).*(?<=\\()[^\\)]+)"); 
    Matcher matcher = pattern.matcher("public native void TextTransArgs(int i, boolean flag, String s)"); 
    if(matcher.find()){ 
     System.out.println(matcher.group(1)); 
     System.out.println(matcher.group(2)); 
     ... 
    } 
} 
+0

(? :(?: public) | (?: Private) | (?: Static) | (?: Protected) \ s +) * –

+5

Регулярно для этого? Вам лучше использовать механизм грамматики ... Кроме того, что говорит о том, что все компоненты будут в одной строке? – fge

+0

Сбалансированный '<>' для дженериков не является регулярным. –

ответ

0

Это известно как определяющая грамматика, поэтому лучше использовать любую грамматику, такую ​​как ANTLR. Я рекомендую сначала увидеть структуру ANTLR. Сначала определите класс, основанный на структуре лексического анализа. HTH

+0

Да, описание функции образовано декомпиляцией. Так что грамматик один и тот же, и описание функции находится в одной строке – user2301210

+0

ok попробуйте еще одну вещь, которая похожа на лексический анализ. определить свои собственные лексемы, а затем сформировать структуру по комбинации этих лексем, а затем сопоставить эту lexeme str с вашими методами. Я думаю, вы работаете над анализом покрытия прога/кода. это достижимо, и я сделал это –

+0

@ user2301210 Информация о декомпиляции должна появиться в вашем вопросе. – EJP

Смежные вопросы