Java 我可以使用正则表达式从短语中解析单词吗?

Java 我可以使用正则表达式从短语中解析单词吗?,java,regex,Java,Regex,我试图从insert语句列表中解析表名,所有语句的形式都是insert into table_a。对于这句话,我想找到名称表a 我目前做这件事的代码相当笨拙,这可以用正则表达式来完成吗 int index = query.indexOf("insert into"); if (index >= 0) { query = query.substring(index + "insert into".length()); query = query

我试图从insert语句列表中解析表名,所有语句的形式都是
insert into table_a
。对于这句话,我想找到名称
表a

我目前做这件事的代码相当笨拙,这可以用正则表达式来完成吗

    int index = query.indexOf("insert into");
    if (index >= 0) {
        query = query.substring(index + "insert into".length());
        query = query.trim();

        index = query.indexOf(" ");
        if (index >= 0)
            return query.substring(0, index);
        else
            return query; // tablename is last word in query
    }

是的,正则表达式在这里应该有帮助:

String input = "INSERT INTO tableA ... INSERT INTO tableB";
String pattern = "insert into ([\\s]+)";
List<String> tables = new ArrayList<>();

Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

Matcher m = r.matcher(input);
while (m.find()) {
    tables.add(m.group(1));
    System.out.println(m.group(1));
}

tableA
tableB
String input=“插入表格A…插入表格B”;
String pattern=“插入([\\s]+)”;
列表表=新的ArrayList();
Pattern r=Pattern.compile(Pattern,Pattern.CASE\u不区分大小写);
匹配器m=r.匹配器(输入);
while(m.find()){
表.增加(m.组(1));
系统输出println(m.group(1));
}
表
表B


注意,我假设您的表名没有空格。如果是这样,那么更好的方法是匹配到左括号,假设您的insert语句是标准SQL。

是的,正则表达式在这里应该有帮助:

String input = "INSERT INTO tableA ... INSERT INTO tableB";
String pattern = "insert into ([\\s]+)";
List<String> tables = new ArrayList<>();

Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

Matcher m = r.matcher(input);
while (m.find()) {
    tables.add(m.group(1));
    System.out.println(m.group(1));
}

tableA
tableB
String input=“插入表格A…插入表格B”;
String pattern=“插入([\\s]+)”;
列表表=新的ArrayList();
Pattern r=Pattern.compile(Pattern,Pattern.CASE\u不区分大小写);
匹配器m=r.匹配器(输入);
while(m.find()){
表.增加(m.组(1));
系统输出println(m.group(1));
}
表
表B


注意,我假设您的表名没有空格。如果是这样,那么更好的方法是匹配到左括号,假设您的insert语句是标准SQL。

到目前为止您尝试了什么?你试过什么吗?到目前为止你试过什么?您是否尝试过比OP版本更严格的方法,因为它要求表名前正好有一个空格。@shmosel在手机上…很难找到test@shmosel我将使用
\\s+
进行修改,我认为更改为
[a-z]
是一个错误。它可以拒绝有效的表名。@shmosel你说得对,但表名的确切字符范围取决于数据库。我已更新以匹配任何非空白字符作为表名。可能太宽了,但可能比我的好。这比OP的版本稍微严格一点,因为它要求表名前正好有一个空格。@shmosel在手机上……很难找到test@shmosel我将使用
\\s+
进行修改,我认为更改为
[a-z]
是一个错误。它可以拒绝有效的表名。@shmosel你说得对,但表名的确切字符范围取决于数据库。我已更新以匹配任何非空白字符作为表名。可能太宽了,但可能比我的好。