Извлечь блок из базы данных

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

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

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

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    имеем поле вида:
    PHP:
    [u]Информация о фильме[/u]
    [
    b]Название: [/b] [size=12][color=darkgreen]Любовница[/color][/size
    [
    b]Оригинальное название: [/b] [size=24][color=black][family=Monotype Corsiva]Aein[/family][/color][/size]
    [
    b]Год выхода: [/b] [size=18]2005[/size]
    [
    b]Жанр: [/b] [color=darkorange][size=12]Мелодрамаэротика[/size][/color]
    [
    b]Режиссер: [/bКим Ын Тхэ Kim Eun-tae
    [b]В ролях: [/bСон Хён А,  Чо Дон Хёк
    [b]О фильме: [/b]
    Может ли одна случайная встречакоторая началась как флирт в лифте и закончится через 24 часаперерасти в любовь всей жизниА если эта встреча происходит накануне свадьбыИ с женихом вы уже семь лет вместеВсе началось как играно почему тогда ей с ним так легко и уютнотак просто и непринужденноНеужели она неслучайно встретила его накануне свадьбыИли это всего лишь игра воображенияВедь дома ждет проверенный и надежный человекЕй предстоит нелегкий выборуверенность в завтрашнем дне или незнакомецкоторый вскружил ей голову.
    [
    b]Выпущено: [/bЮжная Корея
    [b]Продолжительность: [/b01:38:11
    [b]Перевод: [/bОтсутствует
    [b]Субтитры: [/bРусские ([color=red]terra[/color])
    [
    u]Файл[/u]
    [
    b]Формат: [/bAVI
    [b]Качество: [/bDVDRip0.17 bit/pixel
    [b]Видео: [/bКодекXviDРазмер кадра624x336Битрейт880 кб/с
    [b]Аудио: [/bКорейский (МР3102.68 кб/с)
    нужно, чтобы на странице отобразился только блок "О фильме":
    PHP:
    [b]О фильме: [/b]
    Может ли одна случайная встречакоторая началась как флирт в лифте и закончится через 24 часаперерасти в любовь всей жизниА если эта встреча происходит накануне свадьбыИ с женихом вы уже семь лет вместеВсе началось как играно почему тогда ей с ним так легко и уютнотак просто и непринужденноНеужели она неслучайно встретила его накануне свадьбыИли это всего лишь игра воображенияВедь дома ждет проверенный и надежный человекЕй предстоит нелегкий выборуверенность в завтрашнем дне или незнакомецкоторый вскружил ей голову.
    помогите, пожалуйста, решить эту задачку - буду сердечно признателен в решении данного вопроса
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    PHP:
    $block=getBlock() // допустим тут получатся приведенный тобой блок

    $pos1=strpos($block,'[b]О фильме: [/b]'); //найти позицию [b]О фильме: [/b]
    $pos2=strpos($block,"[b]",$pos1+1); //найти позицию следующего [b] после $pos1

    $yourstring=substr($block,$pos1,$pos2-$pos1); //

    $yourstring - будет то что тебе нужно. Эта строка наверное будет в начале и в конце содержать символы перевода строки, поэтому почистишь уже сам. Проверил, работает. Как видишь без регулярки.
     
    Шардик нравится это.
  3. Шардик

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

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    спасибо!!! получилось!!! а если вместо "О фильме" находится "Описание", что здесь делать? массив писать?
     
  4. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Заменяешь "о фильме" на любую обоасть которую захочешь извлечь.
     
    Шардик нравится это.
  5. Шардик

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

    Регистр.:
    21 ноя 2007
    Сообщения:
    47
    Симпатии:
    9
    спасибо, но я учитываю возможность одновременного чередования 2-х полей: "О фильме" и "Описание"..
    попробовал сделать чтото такое:
    $massive=array('О фильме: ','Описание: ');
    $pos1=strpos($descr,$massive); //
    $pos2=strpos($descr,"",$pos1+1); //найти позицию следующего после $pos1

    $gotovo=substr($descr,$pos1,$pos2-$pos1); //

    не получается..
     
  6. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Если нужна 2-я запись то делаешь так:
    PHP:
    $block твой блок из примера.
    $massive=array('[b]О фильме: [/b]','[b]Описание:  [/b]');
    foreach(
    $massive as $val){
    $pos1=strpos($block$val); //
    $pos2=strpos($block"[b]",$pos1+1); //найти позицию следующего [b] после $pos1
    $gotovo=substr($descr,$pos1,$pos2-$pos1); //
    делаешь что-то с $gotovo........
    }
    Просто в цикле сделай для каждой нужной записи аналогичный поиск.
     
  7. bobbig

    bobbig Создатель

    Регистр.:
    14 ноя 2007
    Сообщения:
    34
    Симпатии:
    5
    а если все же с использованием регулярных выражений, код будет выглядеть приблизительно так:
    PHP:
    $text блок 
    $text 
    preg_replace("#\[b\]Описание: \[\/b\]#sU","[b]О фильме: [/b]",$text);
    preg_match_all('#(\[b\]О фильме: \[\/b\].*)\[b\]#sU',$text$arr_match);
    $result $arr_match[1][0]; // для одной (первой) записи
    // или перебор всего массива
    echo "<pre>";
    foreach ( 
    $arr_match[1] as $a )
    {
    echo 
    $a."<br>";
    }
    echo 
    "</pre>";
     
  8. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Есть проблема по регулярке.
    Имеет строка такого плана:
    PHP:
    $stringte "('','2009-08-05 16:09','<img src=\'http://example.com/18093.jpg\'><br/><p><strong>Описание:</strong> описание теста.</p>','<img src=\'http://example.com/18093.jpg\'><br/><p><strong><span style=\"font-size: small;\">Название</span></strong></p><strong>Жанр:</strong> Драма<br /><strong>Год выпуска</strong>: 2008<br /><strong>Режиссер:</strong></p><strong>Размер файла</strong>: 1.46 Гб<br /><strong>Качество Видео:</strong> BDRip<br /><strong>Видео: </strong>XviD, 720x384, 24 fps, 1596 kbps<br /><strong>Аудио:</strong> Любительский (Одноголосый), AC3, 384 kb/s (6 ch)<br />','Название','','Полное название','63,71',1,1,1,1,1);";
    //Пишу регулярку чтоб выдернуть всё, что находится в ''

    preg_match_all("/['(.*)']/"$stringte$m);
    print_r($m);
    Но на выходе фигня получается, подскажите, как правильно выдернуть и почему данный шаблон не работает.
    пытался ещё вот так, тоже не хочет
    PHP:
    preg_match_all('#[\'(.*)\']#'$stringte$m);
    ----------
    Извиняюсь за флуд, но уже допёр всем спасибо решение такое.
    PHP:
    preg_match_all('#\'(.*?)\',#is'$stringte$m);
     
  9. Maza

    Maza

    Регистр.:
    3 июл 2007
    Сообщения:
    255
    Симпатии:
    118
    Проблема тогоже характера, только теперь необходимо блок
    PHP:
    <img src=\'http://knstats.com/uploads4/18093.jpg\'>
    обрамить тэгами
    PHP:
     <div>
        <
    img src=\'http://knstats.com/uploads4/18093.jpg\'>
    </div>
    Написал вот такую регулярку
    PHP:
    $pattern1 "#'(<img\s+src\s*=\s*.*'>)\s*<br\s*/>#i";
    $replacement1 "<div>\${1}</div>";
    echo 
    preg_replace($pattern1$replacement1$stringte);
    Но обрамление происходит всего текста входящего до завершении 2 img, собственно вопрос, можно ли с помощью регулярки добавить <div> вокруг двух <image>
     
  10. steel_HILL

    steel_HILL Постоялец

    Регистр.:
    15 апр 2010
    Сообщения:
    53
    Симпатии:
    14
    А зачем еще и <br /> искать, если обрамлять его не нужно?

     
Статус темы:
Закрыта.