java - 正则表达式在 Java 类的单行/多行中查找注释

标签 java regex annotations

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

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

但它仅适用于单行,不适用于多行。

@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

最佳答案

以下代码可用于在多行注释表达式中提取 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) + ']');

输出:

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

关于java - 正则表达式在 Java 类的单行/多行中查找注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652846/

相关文章:

python - 使用 pandas/regex 提取子字符串

java - java中使用常量作为注解参数

eclipse - 在eclipse中使用jsr305注释Findbugs没有发现bug

spring - 组合 hibernate @Transactional & ehcache @Cacheable 总是创建数据库事务

java - 如何使用 docker-compose 链接两个容器

java - Android - vector 图像质量下降?

java - 正则表达式 - 链接不允许双问号 Java

java - Hadoop MapReduce 作业 : Get the counter outside of the native jvm

mysql - 如何匹配两个数据库表中的相关值?

regex - 如何使用正则表达式将 JSON 对象与唯一 ID 进行匹配