2011-12-28 22 views
1

我想在Java中开发一个正则表达式来查找单行/多行中用于Java类的注释。刚才我正在尝试这一个正则表达式在单行/多行中为Java类查找注释

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

但它只适用于单行,不适用于多行.e.g。

@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 
+0

你有没有考虑使用类似预煮过的,而不是? – fge 2011-12-28 10:09:53

回答

1

这里是你可以用多行注释则表达式来提取namequery代码:

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) + ']'); 

OUTPUT:

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))] 
+0

谢谢。是的,你的正则表达式肯定会起作用,但它只适用于给定的Java源代码行,而不是另一个。其实只是举例来了解我的问题。但需要一个正则表达式来抓取Java中的所有类型的注释,例如@Column(name =“EMP_ID”)@Table(name =“EMP”) – Kishore 2011-12-28 07:57:51

+0

您可能需要调整此正则表达式以适应注释行不断变化的需求。由于我不了解你的所有情况,因此我无法在我的答案中涵盖所有情况。 – anubhava 2011-12-28 08:06:35

+0

很多thx。现在我已经做了必要的调整。 – Kishore 2011-12-28 12:34:57

相关问题