【问题标题】:regular expression to extract JSON string from text从文本中提取 JSON 字符串的正则表达式
【发布时间】:2014-01-04 04:05:11
【问题描述】:

我正在寻找正则表达式来从文本中提取 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)*}

【问题讨论】:

    标签: regex json expression


    【解决方案1】:

    以下正则表达式应该可以工作:

    \{\s*"mTitle"\s*:\s*(.+?)\s*,\s*"mPoster":\s*(.+?)\s*,\s*"mYear"\s*:\s*(.+?)\s*,\s*"mDate"\s*:\s*(.+?)\s*\}
    

    Check demo here.

    与您的正则表达式的主要区别在于 .+? 部分,分解后表示:

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

    + 之后的 ? 运算符在这里非常重要 --- 因为如果您删除它,第一个 .+(在 \{\s*"mTitle"\s*:\s*(.+?) 中)将匹配整个文本,不是 "mPoster" 之前的文字,这就是你想要的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2018-03-12
      • 2014-12-18
      • 2016-05-04
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多