当前位置: 首页 > 面试题库 >

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

辛承志
2023-03-14
问题内容

我想使用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

请帮助我如何获得期望的结果。


问题答案:

您可以尝试以下正则表达式:

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


 类似资料:
  • 输出为 请帮助我如何得到想要的结果。

  • 我有一个声明: 我想创建一个正则表达式,运行会给我以下结果: 基于这个问题和答案,我创建了这样的东西: 然而,我的答案只是: 你能帮我告诉我哪里做错了吗? 我要测试的代码:

  • 我试图在正则表达式中组合if-else,基本上,如果字符串中存在一些模式,则捕获一个模式,如果不存在,则捕获另一个模式。 字符串是:'https://www.searchpage.com/searchcompany.aspx?companyId=41490234 因此,如果在字符串中检测到“?”,则正则表达式应捕获“?”标记之后的所有内容;如果没有,那就从头抓起。 我使用了:

  • 问题内容: 我正在寻找一种解析日志文件的解决方案。看起来像: 可以区分以下元素: 但我仍然不知道该怎么做。简单行不通。 我知道正则表达式具有一般规则,但最合适的是Java。 谢谢 问题答案: 我想出了一种根据可能的/期望的值从与各个字段匹配的块中构建正则表达式的方法。 当然,可以用rex代替rexa或rexi。

  • Java中的正则表达式问题。我正在从元素href属性中提取Id号。我在一个字符串中有一堆这样的链接: