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

Тема в разделе "Регулярные выражения", создана пользователем Compressor, 19 авг 2013.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Compressor

    Compressor

    Регистр.:
    31 янв 2009
    Сообщения:
    314
    Симпатии:
    200
    Парсю 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$matchesPREG_SET_ORDER);
    print_r($matches);
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    попробуй через json_decode (str_replace('"', '"', $flashvars ));
    где flashvars = {'uid':'fdasf_556',
    'comment':'',
    'st':'/css/video.css',
    'file':'/video/video.flv',
    'poster':'/video/poster.jpg'
    }
     
    Compressor нравится это.
  3. Compressor

    Compressor

    Регистр.:
    31 янв 2009
    Сообщения:
    314
    Симпатии:
    200
    Спасибо, но я уже придумал похожее решение. Меня скорее интересует момент с вложенными группами в цикле в регулярках. Как-то можно победить перезапись?
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    хз, что тв имеешь ввиду про перезапись, Но без вложенных циклов для распарсивания - по крайней мере в пхп- нельзя
     
  5. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    а так не проще?..
    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$matchesPREG_SET_ORDER );
     
    print_rjson_decodestr_replace"'"'"'$matches[0][1] ) ) );
     
Статус темы:
Закрыта.