Найти в блоке HTML кода таблицу и заменить ее

Тема в разделе "PHP", создана пользователем askarbin, 25 ноя 2009.

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

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    Подскажите пожалуйста. Ситуация такая:
    Есть переменная с большим количеством символов, в которой по заданию может находится табличка с определенным id.
    Например:
    HTML:
    <table id = "someid">
    ...
    </table>
    Задача:
    Вытащить полностью табличку из переменной
    от <table id = "someid"> и до </table>
    И провести в ней замены при помощи регулярки.
    С заменой все ясно, но вот как мне получить эту табличку (занести в переменную), чтобы ее обработать функцией, а потом вставить обратно в общую переменную в то же самое место?
     
  2. potehi

    potehi Создатель

    Регистр.:
    9 авг 2008
    Сообщения:
    32
    Симпатии:
    22
    Вот:
    Код:
    <?php
    $html = '
    text before
    <table id = "someid">
    test test test
    </table>
    text after
    ';
    
    $mycontent = 'mycontent';
    $someid = 'someid';
    $matches = array();
    $html = preg_replace( '#<table id = "' . $someid . '">([\n\r\w\W.]*?)</table>#Ui',  '<table id = "' . $someid . '">'. $mycontent .'</table>', $html); 
    
    
    echo $html;
    
     
    askarbin нравится это.
  3. askarbin

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    Вы помогли мне выделить часть с таблицей и заменить ее на произвольную, а мне нужно сделать так, чтобы я над выделенной частью провел операции и потом записал ее обратно.
    Это возможно сделать?
     
  4. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    добавьте в начале preg_match с той же регуляркой, этим достается таблица, потом реплейсом уже добавляется
     
    askarbin нравится это.
  5. askarbin

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    Сделал так:
    PHP:
    <?php
    $html 
    '
    text before
    <table id = "someid">
    test test test
    </table>
    text after
    '
    ;
    $someid 'someid'
    preg_match'#<table id = "' $someid '">([\n\r\w\W.]*?)</table>#Ui'$html$matches); 
    $html preg_replace'#<table id = "' $someid '">([\n\r\w\W.]*?)</table>#Ui',  '<table id = "' $someid '">'$matches .'</table>'$html); 
    echo 
    $html;
    ?>
    Вместо test test test получил 1. Что я неверно делаю?
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    А может тогда было проще через strpos и substr решать?

    PHP:
    $code preg_replace('#<table id = "'.$someid.'">(.*?)</table>#Umsi''<table id = "'.$someid.'">\\1</table>'$html); 
    так правильней составлять (это как пример)
     
    askarbin нравится это.
  7. askarbin

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    293
    Симпатии:
    36
    Да, спасибо, все поехало, регуляркой воспользовался вашей, никаких глюков не обнаружил
     
Статус темы:
Закрыта.