匹配引号,忽略转义的引号

有如下类型的字符串

" ,\" 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代码时,\本身也需要转义

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 9,526评论 0 20
  • 一、语法 1.普通字符 普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有...
    Sun____阅读 1,254评论 0 0
  • Linux指令大全 1.cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help...
    muyang_js的简书阅读 7,802评论 0 12
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,748评论 0 38
  • 正则表达式(Regular Expression)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系...
    草鞋弟阅读 4,117评论 0 0