Регулярное выражение для поиска аннотаций в однострочном / многострочном режиме для Java - PullRequest
1 голос
/ 28 декабря 2011

Я хочу разработать регулярное выражение в Java, чтобы найти аннотации в однострочном / многострочном для класса Java.Просто сейчас я пробую этот

String regExp = "^\\s*(@.+)$";

, но он работает только на одной строке, а не на многострочном .eg

@NamedNativeQuery(name = "nativeSQL", query = "SELECT emp1.emp_id, emp1.name, emp1.manager_id, "
+ "emp1.dept_id, emp1.address_id " + "FROM EMP emp1, EMP emp2 "
+ "WHERE ((emp2.EMP_ID = ?) AND (emp2.EMP_ID = emp1.MANAGER_ID))", resultClass = Professor.class)

В данном примере я хочу извлечь ключ-пара значений, например

name = "nativeSQL"
query = "SELECT emp1.emp_id, emp1.name, emp1.manager_id, "
+ "emp1.dept_id, emp1.addr

1 Ответ

1 голос
/ 28 декабря 2011

Вот код, который вы можете использовать для извлечения name и query в выражении многострочной аннотации:

String line = "@NamedNativeQuery(name = \"nativeSQL\", query = \"SELECT emp1.emp_id, emp1.name, emp1.manager_id, \"\n" + 
"+ \"emp1.dept_id, emp1.address_id \" + \"FROM EMP emp1, EMP emp2 \"\n" +
"+ \"WHERE ((emp2.EMP_ID = ?) AND (emp2.EMP_ID = emp1.MANAGER_ID))\", resultClass = Professor.class)\n";
Pattern pt = Pattern.compile("^\\s*@NamedNativeQuery\\(\\s*name\\s*=\\s*\"(.+)\"\\s*,\\s*query\\s*=\\s*\"(.+)\"\\s*,", Pattern.DOTALL);
Matcher m = pt.matcher(line);
if (m.find())
   System.out.println("name: [" + m.group(1) + "] query: [" + m.group(2) + ']');

ВЫВОД:

name: [nativeSQL] query: [SELECT emp1.emp_id, emp1.name, emp1.manager_id, "
+ "emp1.dept_id, emp1.address_id " + "FROM EMP emp1, EMP emp2 "
+ "WHERE ((emp2.EMP_ID = ?) AND (emp2.EMP_ID = emp1.MANAGER_ID))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...