我正在尝试用 Java 解析 SQL 表创建脚本。
我目前得到以下模式:
Pattern p = Pattern.compile("(.+)([ ]+)(.+)([ ]+)(.+)");
即一组任意字符(列名),后跟一个或多个空格,后跟另一组字符(列类型),后跟一个或多个空格,后跟任意数量的字符(即,e不为空等)。
下面的代码使用了它:
Matcher m = p.matcher(field);
if(m.find()){
String column = m.group(1).trim();
String type = m.group(3).trim();
String clauses = m.group(5).trim();
}
然而当我运行它时:
firstColumn varchar(4) not null,
第一组是:
firstColumn varchar(4)
我希望提取的三个字段分别是 firstColumn、varchar(4) 而不是 null。
有什么想法吗?
最佳答案
(.+)
会消耗尽可能多的。要使其消耗尽可能少,请将其更改为(.+?)
。
尝试这样的事情:
String input = "firstColumn varchar(4) not null,";
Pattern p = Pattern.compile("(.+?)\\s+(.+?)\\s+(.*)");
Matcher m = p.matcher(input);
if (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
输出:
firstColumn
varchar(4)
not null,
关于java - 在 Java 中使用正则表达式解析 SQL 表定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308083/