我正在用逗号分隔字符串“foo,bar,c; qual =”baz,blurb“,d; junk =”quux,syzygy“”但是想在引号中保留逗号。这个问题在这个Java: splitting a comma-separated string but ignoring commas in quotes问题中得到了回答,但它无法完全解释海报如何创建这段代码:
line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);
好的,所以我确实了解了一些正在发生的事情,但有一点令我感到困惑。我知道第一个逗号用于匹配。
然后
(?=
是向前搜索。
然后第一部分被分组
([^\"]*\"[^\"]*\").
这让我感到困惑。所以第一部分
[^\"]*
表示带引号的任何行的开头将标记分开零次或多次。
然后来了\“。现在这就像在字符串中打开一个引用或者说这个引用匹配吗?
然后它重复完全相同的代码行,为什么?
([^\"]*\"[^\"]*\")
在第二部分中再次添加相同的代码来解释它必须用引号完成。
有人可以解释我没有得到的部分吗?
答案 0 :(得分:3)
[^\"]
是没有"的任何字符串。 \"比赛"。所以基本上([^ \"] * \" [^ \"] * \")匹配一个包含2 "
的字符串,最后一个字符是{{ 1}}。
答案 1 :(得分:1)
我认为他们在答案后面做了很好的解释:
[^\"]
与引号不匹配。
引用\"
。
所以这部分([^\"]*\"[^\"]*\")
是
[^\"]*
匹配除了引用0次或更多次\"
匹配报价,是的,这是开头报价[^\"]*
匹配除了引用0次或更多次\"
匹配报价,收盘报价他们只需要第一个[^\"]*
,因为它们不以引号开头,它们的示例输入类似于a="abc",b="d,ef"
。如果您正在解析"abc","d,ef"
,那么您将不需要它。
答案 2 :(得分:0)
这是你的字符串/,(?=([^ \"] \" [^ \"] \") [^ \"] $)/
的读数div.addMap {
height: 200px;
width:200px;
border-style: solid;
border-color: black;
}
div#targetDiv {
height: 100px;
width:100px;
border-style: solid;
border-color: yellow;
text-align: center;
}