Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从SQL insert查询字符串中提取带引号的值_Java_Regex_String_Split - Fatal编程技术网

Java 从SQL insert查询字符串中提取带引号的值

Java 从SQL insert查询字符串中提取带引号的值,java,regex,string,split,Java,Regex,String,Split,我正在尝试使用“拆分”来拆分字符串。但我一直都在想一个正则表达式来满足我的需要。字符串将如下所示: INSERT INTO VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger',4006,'Norway'); 我需要能够检索''之间的所有值。关键是保持字符串完好无损。因此,Tom B.Erichsen应该是一个字符串,而不是被分成Tom,B.,Erichsen 另一件事是整数不会被'包围 有谁能给我一些建议,告诉我如何使用拆

我正在尝试使用“拆分”来拆分字符串。但我一直都在想一个正则表达式来满足我的需要。字符串将如下所示:

INSERT INTO  VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger',4006,'Norway');
我需要能够检索
''
之间的所有值。关键是保持字符串完好无损。因此,
Tom B.Erichsen
应该是一个字符串,而不是被分成
Tom
B.
Erichsen

另一件事是整数不会被
'
包围

有谁能给我一些建议,告诉我如何使用拆分或其他方法来解析这些信息吗?

我愿意这样做

它不是有效的SQL(没有表),但我确信它只是一个示例

我首先从括号中拉出子字符串

然后,我假设逗号分隔的值,将其拆分

然后我会处理每个值

不是小事,也不是一步一步


对于SQL INSERT,语法和词法分析器/解析器可能会更好。尝试查看ANTLR。

此代码适用于您提供的示例

 String query = "INSERT INTO  VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger',4006,'Norway');";
    String inside = query.substring(query.indexOf("(")+1, query.indexOf(")"));
    String[] elements = inside.split(",");
    for (String string : elements) {
        if(string.startsWith("'")){
            string = string.substring(1,string.length()-1);
        }
        System.out.println(string);
    }

这不是一种正则语言,所以正则表达式是解决它的错误方法。遍历字符串,解析出不同的组件应该很容易。@DavidConrad:您必须区分
正则表达式的理论意义和实际实现赋予该术语的意义。虽然大多数实现提供的内容确实超出了教科书中的正则表达式,我认为当人们开始尝试用正则表达式解析不规则的东西时,他们会遇到麻烦。举个例子:带引号的字符串可以包含转义单引号吗?它们会包含逗号吗?用有限状态机分析这一点很容易;使用正则表达式会给您带来远远不止两个问题。好吧,让我们看看您的正则表达式如何解析:
INSERT-INTO-VALUES('Don'tlink'\\','Can','you\',tell');'从哪里开始,“,”到哪里结束?)
@DavidConrad我想你需要在
不要
中把撇号加倍。不过字符串中可能有逗号。我不会为ANTLR操心的。一个简单的FSM就可以了。