正则表达式给额外的匹配组

时间:2019-05-13 08:46:22

标签: regex

我的内容是与json混合的文本

blablabla  bla bla 
sdf
sdfsdfsdf {
    "glossary": [{
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    },
    {
        "val":2
    }]
} dd dfsdfsdf
bla blablablabla

我想从字符串中获取json,所以我使用此正则表达式

\{(.|\s)+\}

它给了我(在https://regex101.com/上进行了检查):

  • 与我正确找到的json完全匹配
  • 空组

我不明白是什么原因导致空组出现

1 个答案:

答案 0 :(得分:0)

此空组是\s捕获的最后一个新行符号。 Regex101甚至向您显示警告,当您使用类似(.)+的正则表达式时,只有最后一次出现的.被捕获为组。 您可以使用非捕获组\{(?:.|\s)+\}摆脱分组,也可以使用非捕获组并将第二个组放在量词\{((?:.|\s)+)\}周围,只有一个组。

实际上,请不要这样做。请参阅下面的this评论和评论。