拆分引用了一个字符串java

时间:2016-02-29 14:07:21

标签: java regex

我想对以下问题提供一些帮助。

我有以下字符串

1,1,0,3, '2014-12-02 12:15:13', '2015-05-20', 'string', 'other string', 1,2,1, NULL, '', '', NULL, NULL, NULL

并将进行拆分并将数组仅放入引用忽略其他数组的数组中。你甚至可以用逗号分隔,但序列各不相同。

我正在使用以下正则表达式:

 String splitStr[] = str.split("\'([^\\']*)\'");

但输出如下:

1,1,0,3,, ,,,, ,,, 1,2,1, NULL,, ,,, NULL, NULL, NULL

我需要的恰恰相反,如下所示:

'2014-12-02 12:15:13', '2015-05-20', 'string', 'other string','', ''

2 个答案:

答案 0 :(得分:3)

您可以在Java中执行此操作:

String str = str = "1,1,0,3, '2014-12-02 12:15:13', '2015-05-\\'20', 'string', 'other string', 1,2,1, NULL, '', '', NULL, NULL, NULL";
Pattern p = Pattern.compile("'([^'\\\\]*(?:\\\\.[^'\\\\]*)*)'");
Matcher m = p.matcher(str);

while (m.find()) {
    System.out.println("val: [" + m.group(1) + ']');
}

RegEx Demo

<强>输出:

val: [2014-12-02 12:15:13]
val: [2015-05-\'20]
val: [string]
val: [other string]
val: []
val: []

答案 1 :(得分:0)

正则表达式不支持状态,因此基本上不可能将此作为一般情况。你无法“计算”你在正则表达式中看到过多少引号。

您可以找到库来执行此类操作或循环遍历String并将其拆分为自己匹配或使用模式匹配器。