2014-01-04 6 views
5

Я ищу регулярное выражение для извлечения строки json из текста. У меня есть ниже текст, который содержитрегулярное выражение для извлечения строки 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)*} 

ответ

8

следующее регулярное выражение должно работать:

\{\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).

+0

большое спасибо, acdcjunior. он работает отлично. – isaaijan

+0

Выглядит хорошо, хорошо объяснено –

Смежные вопросы