我正在寻找正则表达式从文本中提取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)*}
答案 0 :(得分: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表示法允许)。