Распарсить массив из JS регуляркой на PHP

Статус
В этой теме нельзя размещать новые ответы.

Compressor

Мой дом здесь!
Регистрация
31 Янв 2009
Сообщения
311
Реакции
202
Парсю html и появилась необходимость получить данные из массива javascript.

Можно ли это сделать одной регуляркой? Сейчас получается, что в цикле групп
:)? () () )+ сохраняется только последние значения, то есть они, наверное, перезаписываются.

PHP:
<?
$html = "
<!doctype html>
<html lang=\"en\">
<head>
    <meta charset=\"UTF-8\">
    <title>Document</title>
</head>
<body>
    <script>
      var flashvars = {'uid':'fdasf_556',
                  'comment':'',
          'st':'/css/video.css',
                  'file':'/video/video.flv',
          'poster':'/video/poster.jpg'
              };
    </script>
</body>
</html>
";
preg_match_all("/var flashvars = {(?:'([^']*)':'([^']*)',?\s*)+};/s", $html, $matches, PREG_SET_ORDER);
print_r($matches);
 
попробуй через json_decode (str_replace('"', '"', $flashvars ));
где flashvars = {'uid':'fdasf_556',
'comment':'',
'st':'/css/video.css',
'file':'/video/video.flv',
'poster':'/video/poster.jpg'
}
 
Спасибо, но я уже придумал похожее решение. Меня скорее интересует момент с вложенными группами в цикле в регулярках. Как-то можно победить перезапись?
 
хз, что тв имеешь ввиду про перезапись, Но без вложенных циклов для распарсивания - по крайней мере в пхп- нельзя
 
а так не проще?..
PHP:
$html = "
    <!doctype html>
    <html lang=\"en\">
    <head>
        <meta charset=\"UTF-8\">
        <title>Document</title>
    </head>
    <body>
        <script>
          var flashvars = {'uid':'fdasf_556',
                      'comment':'',
              'st':'/css/video.css',
                      'file':'/video/video.flv',
              'poster':'/video/poster.jpg'
                  };
        </script>
    </body>
    </html>
    ";
preg_match_all( '~var flashvars = ({.*?});~s', $html, $matches, PREG_SET_ORDER );
 
print_r( json_decode( str_replace( "'", '"', $matches[0][1] ) ) );
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху