2011-12-28 25 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

相關問題