Название блока добавить к каждой характеристике

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

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

    E-body

    Регистр.:
    6 сен 2007
    Сообщения:
    979
    Симпатии:
    315
    Здраствуйте, самостоятельно не в силе решить корректно изза нехватки знаний регулярных выражений.
    Необходимо чтоб название блока, добавлялос к каждой характерстики своего блока.
    Маркет яндекса код от товара http://market.yandex.ru/model-spec.xml?modelid=7764831&hid=294661 (они все по однотипности кода одинаковы)
    Вот возьмем код двух блоков для примера "Основное" и "Экран"
    HTML:
    <tr><th colspan="2" class="b-properties__title">Основное</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Тип</span></th><td class="b-properties__value">портативный</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Область применения</span></th><td class="b-properties__value">автомобильный</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Программное обеспечение</span></th><td class="b-properties__value">Garmin</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Количество путевых точек</span></th><td class="b-properties__value">1000</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Возможность загрузки карты местности</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Функция расчета маршрута</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Голосовые сообщения</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Звуковая сигнализация</span></th><td class="b-properties__value">есть</td></tr><tr><th colspan="2" class="b-properties__title">Экран</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Тип экрана</span></th><td class="b-properties__value">LCD-цветной</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Диагональ экрана</span></th><td class="b-properties__value">5 дюйм.</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Разрешение экрана</span></th><td class="b-properties__value">480x272 пикс.</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Сенсорный экран</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Подсветка экрана</span></th><td class="b-properties__value">есть</td></tr>
    И после обработки получаем прмерно так, около каждой характеристики название ее блока (переходы строк и тройные решеточки добавил для наглядности)
    HTML:
    <tr><th colspan="2" class="b-properties__title">Основное</th></tr><tr>
    ###b-properties__title">Основное</th><th class="b-properties__label b-properties__label-title"><span>Тип</span></th><td class="b-properties__value">портативный</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Область применения</span></th><td class="b-properties__value">автомобильный</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Программное обеспечение</span></th><td class="b-properties__value">Garmin</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Количество путевых точек</span></th><td class="b-properties__value">1000</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Возможность загрузки карты местности</span></th><td class="b-properties__value">есть</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Функция расчета маршрута</span></th><td class="b-properties__value">есть</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Голосовые сообщения</span></th><td class="b-properties__value">есть</td></tr>
    ###b-properties__title">Основное</th><tr><th class="b-properties__label b-properties__label-title"><span>Звуковая сигнализация</span></th><td class="b-properties__value">есть</td></tr>
    <tr><th colspan="2" class="b-properties__title">Экран</th></tr>
    ###b-properties__title">Экран</th><tr><th class="b-properties__label b-properties__label-title"><span>Тип экрана</span></th><td class="b-properties__value">LCD-цветной</td></tr>
    ###b-properties__title">Экран</th><tr><th class="b-properties__label b-properties__label-title"><span>Диагональ экрана</span></th><td class="b-properties__value">5 дюйм.</td></tr>
    ###b-properties__title">Экран</th><tr><th class="b-properties__label b-properties__label-title"><span>Разрешение экрана</span></th><td class="b-properties__value">480x272 пикс.</td></tr>
    ###b-properties__title">Экран</th><tr><th class="b-properties__label b-properties__label-title"><span>Сенсорный экран</span></th><td class="b-properties__value">есть</td></tr>
    ###b-properties__title">Экран</th><tr><th class="b-properties__label b-properties__label-title"><span>Подсветка экрана</span></th><td class="b-properties__value">есть</td></tr>
    [​IMG]

    Самостоятельно пробовал
    и потом значение $1 добавлять к характерстикам $2, $3, $4, $5, и т.д. до $20. Конечно в итоге получалось не то что надо.
     
  2. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    Я бы сделал что-то вроде этого. Хотелось исключительно регуляркой обойтись, но не получилось чето - не стал время дальше тратить...
    PHP:
    $t = <<<HTML
    <table>
    <tr><th colspan="2" class="b-properties__title">Основное</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Тип</span></th><td class="b-properties__value">портативный</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Область применения</span></th><td class="b-properties__value">автомобильный</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Программное обеспечение</span></th><td class="b-properties__value">Garmin</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Количество путевых точек</span></th><td class="b-properties__value">1000</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Возможность загрузки карты местности</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Функция расчета маршрута</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Голосовые сообщения</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Звуковая сигнализация</span></th><td class="b-properties__value">есть</td></tr><tr><th colspan="2" class="b-properties__title">Экран</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Тип экрана</span></th><td class="b-properties__value">LCD-цветной</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Диагональ экрана</span></th><td class="b-properties__value">5 дюйм.</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Разрешение экрана</span></th><td class="b-properties__value">480x272 пикс.</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Сенсорный экран</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Подсветка экрана</span></th><td class="b-properties__value">есть</td></tr>
    </table>
    HTML;
     
    $_t explode("<tr"$t);
    $name "";
    foreach( 
    $_t as $i=>$row )
    {
      if( 
    preg_match("/b-properties__title(?:.*?)>(.*?)<\/th>(?:.*?)<\/tr>/is"$row$match) && isset($match[1])&&$match[1]!='' )
      {
          unset(
    $_t[$i]);
          
    $name $match[1];
      }
      
    $_t[$i] = str_replace('b-properties__label-title"><span>''b-properties__label-title"><span>'.$name.' '$_t[$i]);
      if( 
    trim($_t[$i])=='' ) unset($_t[$i]);
    }
    $t implode('<tr',$_t);
     
    E-body нравится это.
Статус темы:
Закрыта.