java - 在 Java 中使用正则表达式解析 SQL 表定义

标签 java regex

我正在尝试用 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/

相关文章:

java - 如何禁用桌面应用程序中的菜单项?

Java异常层次结构,有什么意义?

regex - 如何在 Perl 中找到与正则表达式的所有匹配项?

python - 如何区分组引用和后面的数字?

php - 从 PHP 字符串中删除控制字符

java - 如何使用 HttpURLConnection 以与 Apache HttpClient lib 相同的方式发出 POST 请求

java - Richfaces 中带注释的 ManagedBean?

Java SDK 管理器崩溃,命令行输出中出现 "flashplayerplugin"

java - 模式中限定词的使用

javascript - 使用正则表达式从字符串中获取特殊字符前后的数字