正则表达式从插入查询中提取值

麦格什·库玛(Magesh Kumaar)

假设我有这个查询

INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz);

我正在使用以下方法单独提取值

public String extractValues(String queryLine){
    return queryLine.substring(queryLine.indexOf('(') + 1,queryLine.lastIndexOf(')'));
}

但是后来我意识到Insert query可以采取以下形式:

INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,bbb,ccc);

现在如何提取值?

我在想也许regex是继续分裂的道路,),(但这似乎并不正确。如果其中一个价值观具有那些价值观呢?因此不确定。

请指导。

案件我正在努力处理

INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,'bb(,)b',ccc);

要求的输出: xxx,yyy,zzz and aaa,'bb(,)b',ccc

PS:值之间的逗号无关紧要

Aris2World

使用此方案通常可以解决识别支持char文字(必须从识别中排除)的语言中的某种模式:

  • 在char文字中查找并替换您要搜索的模式,例如'b),(bb'应该成为'b ### bb'
  • 对修改后的字符串进行识别
  • 恢复char文字内的模式,因此'b ### b'应该返回'b),(bb'

我不知道如何使用单个语句或单个正则表达式来完成此操作。只是为了这个论点,我编写了以下代码。

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ValuesListParse {

  public static void main(String[] args) {

    String stmt = " INSERT INTO `TABLENAME` VALUES(xxx,yyy,zzz),(aaa,'bb),(b',ccc),(aaa,bbb,ccc); ";
    System.out.printf("%s\n", stmt);

    //extract values list
    stmt = stmt.split("(?i)\\s+values\\s*\\(|\\);")[1];
    System.out.printf("values list: %s\n", stmt);

    // identify pattern between '' (char literal) and replace it with another pattern: the 2nd group is what we want 
    /* UPDATE modified regexp from ('.*)(\\)\\,\\()(.*') to ('\\w*)(\\)\\,\\()+(\\w*') to manage multiple literals containig the pattern */
    Matcher m = Pattern.compile("('\\w*)(\\)\\,\\()+(\\w*')").matcher(stmt);
    while (m.find()) {
        stmt = stmt.substring(0, m.start(2)) + "###" + stmt.substring(m.end(2), stmt.length());
        System.out.printf("values list with pattern subst inside char literal: %s\n", stmt);
    }

    // split multiple values
    String[] multiValues = stmt.split("\\)\\,\\(");

    // adjust char literal
    for (int i = 0; i < multiValues.length ; i++) {
        multiValues[i] = multiValues[i].replaceAll("###", "),(");
    }

    System.out.println(Arrays.toString(multiValues));

   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从正则表达式中提取值:c#

来自分类Dev

正则表达式//从<a>链接中提取值

来自分类Dev

MySQL:从查询中提取正则表达式值

来自分类Dev

使用正则表达式从字符串中提取值

来自分类Dev

我如何使用正则表达式从字符串中提取值

来自分类Dev

Pyspark-正则表达式-从最后一个括号中提取值

来自分类Dev

使用正则表达式(python)从文件中提取值的简单方法

来自分类Dev

使用正则表达式从“变量=值”字符串中提取值

来自分类Dev

正则表达式从字符串中提取值

来自分类Dev

使用正则表达式从字符串中提取值

来自分类Dev

正则表达式帮助从字符串中提取值

来自分类Dev

使用正则表达式从R中的字符串中提取值

来自分类Dev

使用正则表达式组从字符串中提取值

来自分类Dev

使用c#中的正则表达式从json响应中提取值

来自分类Dev

在 PowerShell 中从字符串中提取值(使用正则表达式)

来自分类Dev

使用正则表达式提取值

来自分类Dev

使用正则表达式的Ansible提取值

来自分类Dev

使用正则表达式从源代码中提取SQL查询

来自分类Dev

正则表达式从js代码中提取地址

来自分类Dev

从正则表达式中提取数据

来自分类Dev

使用正则表达式从网页中提取表格

来自分类Dev

正则表达式-从网址中提取数字

来自分类Dev

正则表达式从行中提取IP地址

来自分类Dev

JMeter:从数组响应中提取正则表达式

来自分类Dev

在通用Lisp中提取正则表达式匹配

来自分类Dev

从正则表达式中提取文本?

来自分类Dev

正则表达式如何从括号中提取单词

来自分类Dev

在正则表达式PHP中提取链接

来自分类Dev

Javascript正则表达式在括号中提取

Related 相关文章

热门标签

归档