Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/正则表达式:不在{}、[]或";内使用逗号拆分字符串&引用;?_Java_Regex_String_Parsing - Fatal编程技术网

Java/正则表达式:不在{}、[]或";内使用逗号拆分字符串&引用;?

Java/正则表达式:不在{}、[]或";内使用逗号拆分字符串&引用;?,java,regex,string,parsing,Java,Regex,String,Parsing,如果我有如下字符串(碰巧看起来很像JSON): 我怎样才能将该字符串仅用不出现在{}、[]或“中的逗号分割,从而得到以下分隔的字符串: “名称”:“前积云” “作者”:[“布利策”、“斯图尔特”] “出版商”:{“名称”:“麦格劳·希尔”,“年份”:“2012年”, “城市”:[“纽约”、“伦敦”、“多伦多”] } 我知道,只需一个循环,检查给定的逗号是否在{}、[]或“之间,然后有选择地进行拆分,就可以轻松完成上述拆分,但使用正则表达式似乎是一个更干净的选项,因此,任何帮助都将不胜感激 让我知

如果我有如下字符串(碰巧看起来很像JSON):

我怎样才能将该字符串仅用不出现在
{}
[]
中的逗号分割,从而得到以下分隔的字符串:

  • “名称”:“前积云”
  • “作者”:[“布利策”、“斯图尔特”]
  • “出版商”:{“名称”:“麦格劳·希尔”,“年份”:“2012年”, “城市”:[“纽约”、“伦敦”、“多伦多”] }

  • 我知道,只需一个循环,检查给定的逗号是否在
    {}
    []
    之间,然后有选择地进行拆分,就可以轻松完成上述拆分,但使用正则表达式似乎是一个更干净的选项,因此,任何帮助都将不胜感激

    让我知道这是否适用于您的目的:

    "[^,[{]++(?=,)|".*?[]}]++
    

    匹配一个字符串,该字符串以双引号开头,后跟任何非逗号或左括号的内容,直到找到后跟逗号的字符为止

    -或-

    一种字符串,以双引号开头,后跟尽可能少的字符,直到到达一个或多个右括号

    更新

    我忍不住用这个来解释线路终止符

    (?=.+?{)[\s\S]+?}|(?=.+?\[)[\s\S]+?]|[^,[{]+?(?=,)
    

    需要对lookaheads的支持

    向前查找一个{,如果它找到一个,则匹配直到它找到一个}或

    查找一个[如果它找到一个,则匹配直到找到]或


    在找到后跟逗号的字符之前,不要匹配逗号或左括号/大括号。

    Regex是错误的工具。相反,您应该使用JSON解析器。看看谷歌的GSON库:这里有一个类似的CSV问题。基于这里的讨论,我怀疑正则表达式是否会更干净。@TimBiegeleisen如果我正在尝试构建自己的JSON解析器呢?(当然是一种学习经验),那么继续构建一个解析器吧。您可能需要使用堆栈。正则表达式甚至可能是解决方案的一部分,但要求我们使用正则表达式来处理复杂的JSON结构并不是解决这个问题的方法。2) 如果您的目标是学习如何编写自己的解析器,那么要求我们为您编写正则表达式不是正确的方法。
    (?=.+?{)[\s\S]+?}|(?=.+?\[)[\s\S]+?]|[^,[{]+?(?=,)