我正在用逗号分隔字符串“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个"的字符串,最后一个字符是"

07-24 18:20
查看更多