【问题标题】:Parsing Insert SQL Query in Java using Regular Expression使用正则表达式在 Java 中解析插入 SQL 查询
【发布时间】:2016-11-30 03:49:07
【问题描述】:

我想使用 Regex 解析 Java 中的插入查询。

下面是示例字符串

插入表名 (c1,c2,c3) 值 (abc,def,ghi) , (jkl,mno,pqr)

我想要以下输出:

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

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

插入 ([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

请帮助我如何获得所需的结果。

【问题讨论】:

    标签: java sql regex


    【解决方案1】:

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

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

    解释:

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

    (?<=\\()(\\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
    

    【讨论】:

    • Ty 从来没有想过要使用 Regex 的 Look Behind 功能。
    【解决方案2】:

    检查这是否有效

    (INSERT INTO) (\S+).*\((.*?)\).*(VALUES).*\((.*?)\)(.*\;?)
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 我想要一个解析通用插入查询的解决方案。
      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多