有如下类型的字符串
" ,\" bbb\", \" ccc\" aaa \" , \" 'eeee' , 'fff' " , "gggg"
如果想要分割为
" ,\" bbb\", \" ccc\" aaa \" , \" 'eeee' , 'fff' "
"gggg"
两个子串,直接用spilt(",")显然是不行的
正则可以这么写
(?<=(?<!\\)")\s*,\s*(?=(?<!\\)")
(?<!exp2)exp1 的意思是匹配exp1且前面不是exp2
(?<!\)" 就是匹配引号,且前面不能是\
(?<=exp2)exp1 的意思是匹配exp1且前面是exp2
\s表示匹配空白字符串
\s,\s 表示的意思是匹配逗号,前后可以有任意空格
(?<=(?<!\)")\s,\s 的意思就是匹配逗号,前后可以有任意空格,且前面要匹配引号,且引号前面不能是\
exp1(?=exp2) 的意思是匹配前面的exp1,且后面是exp2
(?<=(?<!\)")\s,\s(?=(?<!\)")
整体的匹配规则就是
1、匹配逗号,逗号前后可以有任意空格,
2、对于1匹配的结果,前后要匹配引号,且引号前面不能有\
类似的如果要直接获取引号内的内容也可以用我这个思路
以上的例子是双引号的匹配,把双引号换成单引号就可以匹配单引号分割的字符串了。
另外注意写成java代码时,\本身也需要转义