从文本中提取JSON字符串的正则表达式

6
我正在寻找提取文本中json字符串的正则表达式。我有下面的文本,其中包含


JSON string(mTitle, mPoster, mYear, mDate)

像这样:

{"999999999":"138138138","020202020202":{"846":{"mTitle":"\u0430","mPoster":{"
small":"\/upload\/ms\/b_248.jpg","middle":"600.jpg","big":"400.jpg"},"mYear"
:"2013","mDate":"2014-01-01"},"847":{"mTitle":"\u043a","mPoster":"small":"\/upload\/ms\/241.jpg","middle":"600.jpg","big":"
138.jpg"},"mYear":"2013","mDate":"2013-12-26"},"848":{"mTitle":"\u041f","mPoster":{"small":"\/upload\/movies\/2
40.jpg","middle":"138.jpg","big":"131.jpg"},"mYear":"2013","mDate":"2013-12-19"}}}

为了解析JSON字符串,我需要从文本中提取JSON字符串。

因此,我的问题是:能否帮我只从文本中获取JSON字符串?请帮忙。

我尝试了这个正则表达式但没有成功:

{"mTitle":(\w|\W)*"mDate":(\w|\W)*}
1个回答

8
以下正则表达式应该有效:
\{\s*"mTitle"\s*:\s*(.+?)\s*,\s*"mPoster":\s*(.+?)\s*,\s*"mYear"\s*:\s*(.+?)\s*,\s*"mDate"\s*:\s*(.+?)\s*\}

点击此处查看演示。

与您的正则表达式的主要区别在于 .+? 部分,它的含义如下:

  • 匹配任何字符 (.)
  • 一次或多次 (+)
  • 尽可能少地匹配 (?)

这里的 ? 运算符非常重要 --- 因为如果您将其删除,第一个 .+(在 \{\s*"mTitle"\s*:\s*(.+?) 中)将匹配整个文本,而不是您想要的直到 "mPoster" 一词的文本。

请注意,它只是 \{"mTitle":(.+?),"mPoster":(.+?),"mYear":(.+?),"mDate":(.+?)\} 的一个更复杂的版本(使用 \s* 匹配 JSON 表示法允许的空格)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接