我正在使用以下字符串:
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]
到目前为止,我已经能够正确匹配逗号了。然而,这与我实际需要的相反。我一直使用的正则表达式是:
(,(?![^\[]*]))
关于如何重写它以获得当前结果的倒数有什么建议吗?
最佳答案
好吧,给你:
(?:[^\]\[,]+|\[[^\]\[]+\])+
这是一个regex demo 。您可以通过模式匹配找到:
Pattern pattern = Pattern.compile("(?:[^\\]\\[,]+|\\[[^\\]\\[]+]\])+");
Matcher matcher = pattern.matcher(str);
while (matcher.find())
System.out.println(matcher.group());
这匹配所有不包含逗号或方括号的序列。当我们遇到方括号时,该组交替到右侧,匹配方括号之间的所有内容,然后返回左侧以匹配下一个逗号之前的所有内容,冲洗并重复,有效地断言匹配而不会遇到取消资格的逗号。
这是一个jdoodle code demo .
关于java - 匹配逗号分隔列表中的组,忽略括号中的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917111/