我正在用逗号分隔字符串“foo,bar,c; qual =” baz,blurb“,d; junk =” quux,syzygy“”,但希望将逗号保留在引号中。这个问题在Java: splitting a comma-separated string but ignoring commas in quotes问题中得到了回答,但未能完全说明发布者如何创建这段代码:
line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);
好,所以我确实了解正在发生的事情,但是有些让我感到困惑。我知道第一个逗号用于匹配。
然后
(?=
是向前搜索。
然后将第一部分分组
([^\"]*\"[^\"]*\").
这让我感到困惑。所以第一部分
[^\"]*
表示任何带引号的行的开头都将标记分隔零次或多次。
然后是\“。现在就像打开字符串中的引号,还是说匹配此引号?
然后,它重复完全相同的代码行,为什么呢?
([^\"]*\"[^\"]*\")
在第二部分中,再次添加相同的代码来说明它必须以引号结尾。
有人可以解释我没有得到的部分吗?
最佳答案
[^\"]
是任何不带“。\”的字符串,因此匹配“。”因此基本上([^ \“] * \” [^ \“] * \”)匹配包含2个"
的字符串,最后一个字符是"
。