使用正则表达式解析Java中的SQL查询

时间:2016-11-30 03:49:08

标签: java sql regex

我想使用Regex解析Java中的Insert Query。

以下是示例字符串


    INSERT INTO table_name (c1,c2,c3) VALUES (abc,def,ghi) , (jkl,mno,pqr)

我想要以下输出:

Group1: table_name  
Group2: c1,c2,c3    
Group3: abc,def,ghi
Group4: jkl,mno,pqr

我尝试过以下正则表达式:


    INSERT INTO ([A-Za-z][A-Za-z0-9_-]*) (?:\((.*)\))?\s*VALUES (\((,)?(.*)\))*

输出

Group1 : table_name
Group2 : c1,c2,c3
Group3 : (abc,def,ghi) , (jkl,mno,pqr)
Group4 : Empty
Group5 : abc,def,ghi) , (jkl,mno,pqr

请帮助我如何获得理想的结果。

3 个答案:

答案 0 :(得分:2)

你可以试试这个正则表达式:

((?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+))|((?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\)))

说明:

(?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+)[\\w\\d_]+(INSERT\\sINTO\\s)之间匹配\\s+

(?<=\\()(\\s*[\\w\\d_,]+\\s*)+(?=\\))[\\w\\d_,]+\\(之间匹配\\)

以下是一个示例代码:

import java.util.regex.*;

public class HelloWorld {
    public static void main(String []args){
        String test = "INSERT INTO table_name (c1,c2,c3) VALUES (abc,def,ghi) , (jkl,mno,pqr)";

        String regex = "((?<=(INSERT\\sINTO\\s))[\\w\\d_]+(?=\\s+))|((?<=\\()([\\w\\d_,]+)+(?=\\)))";

        Pattern re = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher m = re.matcher(test);
        while (m.find()) {
            System.out.println(m.group(0));
        }
     }
}

输出如下:

table_name
c1,c2,c3
abc,def,ghi
jkl,mno,pqr

答案 1 :(得分:0)

对于查询的这个特定示例,以下正则表达式应该可以解决问题。

INSERT INTO (\S+) \((\S+)\) VALUES \((\S+)\) , \((\S+)\)

https://regex101.com/r/2Kdayp/1

答案 2 :(得分:0)

检查是否可行

export const typedAction = (type: string, payload?: any) => {
    return { type, payload };
}

https://regex101.com/r/0wsoqJ/4