Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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正则表达式-拆分逗号分隔列表,但不包括括号内的逗号_Java_Regex_Comma_Brackets - Fatal编程技术网

Java正则表达式-拆分逗号分隔列表,但不包括括号内的逗号

Java正则表达式-拆分逗号分隔列表,但不包括括号内的逗号,java,regex,comma,brackets,Java,Regex,Comma,Brackets,我正在尝试编写正则表达式,它将拆分如下Java字符串: 300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90) 300x250 468x60 300x400v(480x320,768x1024,100x100) 400x300v 640x480v(200x200,728x90) 在这方面: 300x250,468x60,300x400v(480x320,768x1024,100x

我正在尝试编写正则表达式,它将拆分如下Java字符串:

300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)
300x250 
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)
在这方面:

300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)
300x250 
468x60
300x400v(480x320,768x1024,100x100)
400x300v
640x480v(200x200,728x90)
我一直在尝试
\,(\()?
,但最终还是选择了括号中的逗号


感谢您的帮助!

如果您必须使用正则表达式,您可以在
上进行拆分(?![^(]*\\)

如果不是,那么对字符进行一次简单的迭代就可以达到目的

String data="300x250,468x60,300x400v(480x320,768x1024,100x100),400x300v,640x480v(200x200,728x90)";

List<String> tokens=new ArrayList<>();
StringBuilder buffer=new StringBuilder();

int parenthesesCounter=0;

for (char c : data.toCharArray()){
    if (c=='(') parenthesesCounter++;
    if (c==')') parenthesesCounter--;
    if (c==',' && parenthesesCounter==0){
        //lets add token inside buffer to our tokens
        tokens.add(buffer.toString());
        //now we need to clear buffer  
        buffer.delete(0, buffer.length());
    }
    else 
        buffer.append(c);
}
//lets not forget about part after last comma
tokens.add(buffer.toString());

String[] splitedArray=tokens.toArray(new String[tokens.size()]);

//lets test what is inside our array
for (String s : splitedArray)
    System.out.println(s);

akburg,重新提出这个问题以供完成,因为它有另一个没有提到的简单解决方案。这种情况类似于

下面是我们的简单正则表达式:

\([^)]*\)|(,)
交替的左侧匹配complete
(括号)
标记。我们将忽略这些匹配。右侧匹配并捕获逗号到组1,我们知道它们是右逗号,因为它们与左侧的表达式不匹配

此程序显示了如何使用正则表达式(请参见列表底部的结果):

参考


可能重复@jlordo-链接的问题不是重复的。用户没有试图平衡括号-只有一层,完全可以使用正则表达式。@Cyborgx37:如果您确定,请发布正则表达式解决方案。Stephen C的答案无效。@jlordo-Pshemo已经有了。
,(?![^(]*\)
在上非常有效。这里有一个链接:@Cyborgx37:Overread他的答案中的regex部分。是的,它工作得很好。您的示例输出非常令人困惑和误导。:)此外,我认为如果它在字符类中,您不必逃避开头部分。@Cyborgx37希望现在不再那么困惑:)