Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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_Coldfusion - Fatal编程技术网

Java 匹配以逗号分隔的列表中的组,忽略括号中的逗号

Java 匹配以逗号分隔的列表中的组,忽略括号中的逗号,java,regex,coldfusion,Java,Regex,Coldfusion,我正在使用以下字符串: required,something_here[arg1,arg2],hey_yo[abc=123], is_date,date_after[date1,date2] 我的目标是匹配用逗号分隔的组,但忽略括号内的逗号。最终结果将是: required something_here[arg1,arg2] hey_yo[abc=123] is_date date_after[date1,date2] 到目前为止,我已经能够正确匹配逗号。然而,这与我实际需要的正好相反。我一

我正在使用以下字符串:

required,something_here[arg1,arg2],hey_yo[abc=123], is_date,date_after[date1,date2]
我的目标是匹配用逗号分隔的组,但忽略括号内的逗号。最终结果将是:

required
something_here[arg1,arg2]
hey_yo[abc=123]
is_date
date_after[date1,date2]
到目前为止,我已经能够正确匹配逗号。然而,这与我实际需要的正好相反。我一直使用的正则表达式是:

(,(?![^\[]*]))
有什么建议可以让我重写它以获得与当前结果相反的结果吗

好了,给你:

?:[^\]\[,]+|\[[^\]\[]+\]+ 这是一本书。您可以通过模式匹配找到:

Pattern pattern = Pattern.compile("(?:[^\\]\\[,]+|\\[[^\\]\\[]+]\])+");
Matcher matcher = pattern.matcher(str);
while (matcher.find())
    System.out.println(matcher.group());
这匹配所有不包含逗号或方括号的序列。当我们遇到方括号时,该组交替到右侧,匹配方括号之间的所有内容,然后返回到左侧,将所有内容匹配到下一个逗号,冲洗并重复,有效地断言匹配,而不会出现不合格的逗号


以下是一个。

您可以使用这个基于前瞻性的正则表达式:

,(?![^\]\[]*\])

?![^\]\[]*\]是负向前看,它将确保逗号不在[和]之内,方法是确保逗号后面没有0个或多个非方括号字符,后跟]。

若要查找不带前导空格和尾随空格的项,并允许空项,可以使用以下方法:

(?=[^\s,])(?: ?[^[\s,]+|\[[^]]*])*|(?<=,|^)(?=\s*(?:,|$))
这个方法怎么样

(?:([^,\[]*\[[^\]]*\])(?:,|$))|([^,\[\]]+(?:,|$))
该模式由两个可选模式匹配组成,一个带括号,另一个不带括号。 这也使用非捕获组?:用于锚定匹配和分组。 但是,这两个捕获组应该与您正在寻找的匹配

从左到右阅读:

匹配除逗号或开括号外的任何内容,贪婪匹配 匹配选项括号 匹配除括号外的任何内容 匹配逗号或行尾 或 匹配除comm之外的任何内容あ 或开括号,至少一个字符,贪婪匹配 匹配逗号或行尾
把这个扔到这里是因为我想看看我能想出什么

([^,]+\[[^\],]*,[^\],]*\]|[^,]+)

非常感谢。此解决方案是完美的,即使在更大的测试场景中也是如此。同样好的是,它没有捕获括号为空的组。通过使方括号组可选,可以减少丰度。