отделить html текст

Тема в разделе "Регулярные выражения", создана пользователем Шардик, 25 авг 2009.

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

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    имею регулярку:
    Код:
    "<span style="font-weight: bold">\xCF+.(.*)\s++.(.*)\s++.(.*)\s++.(.*)\s++.(.*)\s++.(.*)\s
    пытаюсь вывести на странице код html до строки <span style="font-weight: bold">Продолжительность: </span>01:15:31 :
    Код:
    <span style="font-size: 20px; line-height: normal">Алеша Попович и Тугарин Змей/Alesha Popovich and Tygarin snakes (2004) DVDRip</span>
    <br />
    <br />
    <div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="http://dxp.ru/photos/09082214220113639_f0_0.jpg" id="postImgAligned" class="postImg" alt="" /></div><span style="font-weight: bold">Страна: </span>Россия
    <br />
    <span style="font-weight: bold">Режиссер: </span>Константин Бронзит
    <br />
    <span style="font-weight: bold">В ролях: </span>Олег Куликович, Сергей Маковецкий, Лия Медведева, Дмитрий Высоцкий, Анатолий Петров, Михаил Черняк
    <br />
    <br />
    <span style="font-weight: bold">Субтитры: </span>русские
    <br />
    <span style="font-weight: bold">Сюжет фильма: </span> Упустив злодеев тугарских с данью жителей Ростова, богатырь Алеша Попович должен восстановить свое доброе имя, вернуть золото и прогнать с земли русской Тугарина Змея. Помогают Алеше в этом нелегком деле конь Юлий Цезарь, который не в меру говорлив и при этом трусоват, красна девица Любава, Дед с Бабкой и ослик Моисей... Алеша с друзьями преодолевают множество препятствий, и пусть у него не всегда все получается складно - настанет тот день, когда его по праву можно будет назвать богатырем!
    <br />
    <br />
    [COLOR="DarkRed"]<span style="font-weight: bold">Продолжительность: </span>01:15:31
    <br />
    <span style="font-weight: bold">Качество видео: </span>DVDRip
    <br />
    <span style="font-weight: bold">Видео: </span>кодек : DivX, размер кадра: 24бит, битрейт : 1265 кб/с
    [/COLOR]<br />
    <span style="font-weight: bold">Аудио: </span>язык: Русский, перевод: оригинал, кодек: MP3, битрейт: <br />129 кб/с
    <br />
    [spoiler=скриншоты]<img src="http://dxp.ru/photos/09082214220113639_f19_0.jpg" border="0" onload="imgFit(this, screen.width-400);" onclick="imgFit(this, screen.width-400);" alt="" />
    <span style="font-size: 20px; line-height: normal">Алеша Попович и Тугарин Змей/Alesha Popovich and Tygarin snakes (2004) DVDRip</span>
    <br />
    <br />
    <div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="http://dxp.ru/photos/09082214220113639_f0_0.jpg" id="postImgAligned" class="postImg" alt="" /></div><span style="font-weight: bold">Страна: </span>Россия
    <br />
    <span style="font-weight: bold">Режиссер: </span>Константин Бронзит
    <br />
    <span style="font-weight: bold">В ролях: </span>Олег Куликович, Сергей Маковецкий, Лия Медведева, Дмитрий Высоцкий, Анатолий Петров, Михаил Черняк
    <br />
    <br />
    <span style="font-weight: bold">Субтитры: </span>русские
    <br />
    <span style="font-weight: bold">Сюжет фильма: </span> Упустив злодеев тугарских с данью жителей Ростова, богатырь Алеша Попович должен восстановить свое доброе имя, вернуть золото и прогнать с земли русской Тугарина Змея. Помогают Алеше в этом нелегком деле конь Юлий Цезарь, который не в меру говорлив и при этом трусоват, красна девица Любава, Дед с Бабкой и ослик Моисей... Алеша с друзьями преодолевают множество препятствий, и пусть у него не всегда все получается складно - настанет тот день, когда его по праву можно будет назвать богатырем!
    <br />
    <br />
    но некорректно режет, если в конец кода добавляется еще 2-3 строки.
    существует ли способ быстрой кастрации текста?
    спасибо за помощь.
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    PHP:
    echo(substr($html0strpos($html'<span style="font-weight: bold">Продолжительность')));
    не подходит?

    p.s. не совсем правда понял, что нужно вывести то..html код до продолжительности или разбить этот кусок кода
     
    Шардик нравится это.
  3. Шардик

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    спасибо.. обязательно попробую.. [проверил, работает]
     
  4. Шардик

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    а средством функции preg_replace можно сделать?

    предположим, так:
    требуется отсечь текст функцией substr - $resultat77 = substr($postrow[$i]['post_html'], 0, strpos($postrow[$i]['post_html'], '</div><!--/spoiler-body-->'));

    текст отсекается

    затем задаю $resultat77 = preg_replace('/<div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="/', '<div class="postImg-wrap" style="float: left; clear: left; padding: 5px 5px 1px;"><img width="150" height="200" src="', $postrow[$i]['post_html']);

    работает только последнее, отсекатель не робит( (дело естественно, в приоритете preg_replace)
    больше ниче в данный момент на ум не приходит(((
    то есть, либо первое, либо второе использовать - одновременно не канает(
     
  5. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Дело, естественно, в том, что ты поочереди обрабатываешь один и тот же текст сначала первой функцией, потом второй (ей так же достаётся оригинал).

    Во втором случае вместо $postrow[$i]['post_html'] логичнее поставить $resultat77 и здесь больше подходит функция str_replace.
     
  6. Шардик

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    сделал как вы сказали...
    Код:
    while ( $postrow[] = mysql_fetch_array($result)) ;
    // вывод
    
    echo "<table>";
    
    for($i = 0; $i < $num; $i++)
    {
    $letters = array('/<div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="/', '/<span style="font-weight: bold">\xCF+.(.*)/','/<span style="font-weight: bold">\xC0+.(.*)/','/\[spoiler=скриншоты]\](.*?)\[\/div\]/is');
    $fruit   = array('<div class="postImg-wrap" style="float: left; clear: left; padding: 5px 5px 1px;"><img width="150" height="200" src="', '','','');
    
    [B]$resultat77 = substr($postrow[$i]['post_html'], 0, strpos($postrow[$i]['post_html'], '</div><!--/spoiler-body-->'));
    $resultat = str_replace($letters, $fruit, $resultat77);
    [/B]echo "<tr>
             <td>".$postrow[$i]['topic_title']."</td>
             <td>".$postrow[$i]['topic_time']."</td></tr>
    
           <tr><td colspan=\"2\"><a href=http://dxp.ru/viewtopic.php?t=".$postrow[$i]['topic_id'].">".$resultat."</a></td></tr>";
    }
    выполняется только $resultat77 = substr($postrow[$i]['post_html'], 0, strpos($postrow[$i]['post_html'], '</div><!--/spoiler-body-->'));
    а str_replace вообще не фурычит..
     
  7. Шардик

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    если этот метод недействителен или зашел в тупик, можно ли как то из html кучи выдрать только 2 строчки:
    PHP:
    <div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="http://dxp.ru/photos/09082214220113639_f0_0.jpg" id="postImgAligned" class="postImg" alt="" /></div>
    и
    PHP:
    <span style="font-weight: bold">Сюжет фильма: </spanУпустив злодеев тугарских с данью жителей Ростовабогатырь Алеша Попович должен восстановить свое доброе имявернуть золото и прогнать с земли русской Тугарина ЗмеяПомогают Алеше в этом нелегком деле конь Юлий Цезарькоторый не в меру говорлив и при этом трусоваткрасна девица ЛюбаваДед с Бабкой и ослик Моисей... Алеша с друзьями преодолевают множество препятствийи пусть у него не всегда все получается складно настанет тот денькогда его по праву можно будет назвать богатырем!
    <
    br />
    с уважением еще раз к помогающим. спасибо!
     
  8. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Для str_replace нужно указать точную строку что искать и на что заменить, никаких регулярных выражений туда совать не нужно ))
    Вот конкретно в этом случае можно обойтись str_replace, т.к. регулярные выражения на деле совсем не используются:
     
  9. Шардик

    Шардик Создатель

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    спасибо, получилось так:
    PHP:
    for($i 0$i $num$i++)
    {
    $letters = array('<div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="''/<span style="font-weight: bold">\xCF+.(.*)/','"font-family:"','/<span style="font-weight: bold">Продолжительность.(.*)\s++/');
    $fruit   = array('<div class="postImg-wrap" style="float: left; clear: left; padding: 5px 5px 1px;"><img onload="imgFit(this, screen.width-400);" onclick="imgFit(this, screen.width-400);" width="150" height="200" src="''font-family:Verdana','тест');

    $resultat77 str_replace($letters$fruit$postrow[$i]['post_html']);

    $resultat substr($resultat770strpos($resultat77'<div class="spoiler'));

    echo 
    "<tr>
    <!--        <td>"
    .$postrow[$i]['topic_title']."</td> -->
             <td>"
    .$postrow[$i]['topic_time']."</td></tr>

           <tr><td width=\"90%\" cellpadding=\"4\" cellspacing=\"4\"><a href=http://dxp.ru/viewtopic.php?t="
    .$postrow[$i]['topic_id'].">".$resultat."</a></td></tr>";
    }
    echo 
    "<table>";
    p.s. все-таки хотелось вытаскивать конкретные <span>...</span>
    есть такая возможность?
     
  10. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Вот этот мой комментарий:
    касается только вот этого куска кода, который я видел на тот момент:
    PHP:
    $resultat77 preg_replace('/<div class="postImg-wrap" style="float: right; clear: right; padding: 4px 4px 2px;"><img src="/''<div class="postImg-wrap" style="float: left; clear: left; padding: 5px 5px 1px;"><img width="150" height="200" src="'$postrow[$i]['post_html']);
    Потом в коде появились ещё 2 span'а с реальными регулярками, там уже str_replace не подходит. Надо определиться: либо str_replace со статично заданными строками, либо preg_replace с регулярками.
     
Статус темы:
Закрыта.