За последние 24 часа нас посетили 20094 программиста и 1710 роботов. Сейчас ищут 1499 программистов ...

помогите с регуляркой

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

  1. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    задача:
    есть база с заказами, заказы хранятся в формате текста. Из заказов надо вырвать следующие данные:
    ид модели
    название модели
    количество заказанных моделей
    цена за единицу
    ид производителя модели.

    заказы могут быть в двух видах:
    1)
    • <a href=/catalog/m61.html target=_blank>Кресло-кровать/Орион/Фабрика &quot;Русский мастер&quot;</a><br>
      Кол-во: 2<br>
      Материал: 3 группа, Коллекция: <b>Сьюзи Принт</b>, Название материала: <b>VesnaBordo</b>, Компаньон: <b>VesnaBordoCom</b><br>
      Признаки модели: <br><b>Вид ножек</b>: Без ножек<br><b>Вид покрытия</b>: Несъемные чехлы<br><b>Возможность изменения размера</b>: Возможно изменение размера<br><b>Дополнительные элементы</b>: Ящик для белья<br><b>Механизм трансформации</b>: Выкатной<br><b>Конфигурация кресла</b>: Кресло-кровать<br><b>Назначение кресла</b>: Раскладное (спальное)<br><b>Подлокотники</b>: Мягкие<br><b>Тип модульной системы</b>: Гостиная модульная<br><b>Целевое предназначение</b>: Для гостиной<br><br>
      Признаки изделия: <br><b>Габарит</b>: 85x96
      <br><b>Размер спального места</b>: 60x220
      <br>
      <#>
      Цена приходная за ед.:5040 руб.<br>
      Цена розничная за ед.:5040 руб.<br>
      id модели: 61<br>
      id производителя: 1<~>

    2)
    • <a href="/detskaya_mebel/detskaya_krovat/drim_ldsp-m1731.html" target="blanck">Детская кровать/Дрим ЛДСП/Фабрика &quot;ВЗПО&quot;</a><br>
      Кол-во: 1 <br>
      Материал: с матрацем.
      Коллекция: <b>с матрацем</b>,
      Название материала: <b>oreh__</b> ,
      <br>
      Признаки модели: <br><b>Наполнение спального места:</b> Пружинный блок<br><b>Дополнительные элементы:</b> Ящик для белья<br><b>Возможность изменения размера:</b> Возможно изменение размера<br><b>Вид матраца:</b> Блок независимых пружин<br><b>Целевое предназначение:</b> Детская мебель<br><br>Признаки изделия: <br> <b>Габарит</b>: 90х190/200
      <br>
      <#>
      Цена приходная за ед.:8850 руб.<br>
      Цена розничная за ед.:8850 руб.<br>
      id модели: 1731<br>
      id производителя: 37<~>

    у меня с регуляркой туговато и поэтому сделал так:
    PHP:
    1. preg_match("/\<a.*blan[c]*k[\"]*\>(.*)\<\/a\>/",$bad_element,$arr);
    2. $model_name = (string)$arr[1];
    3.  
    4. preg_match("/.*-во:\s([0-9]+)[\s]*\<br\>.*/",$bad_element,$arr2);
    5. $quantity = (int)$arr2[1];
    6.  
    7. preg_match("/.*id[\s]модели:[\s]([0-9]+)\<br\>.*/",$bad_element,$arr3);
    8. $model_id = (int)$arr3[1];
    9.  
    10. preg_match("/.*id[\s]производителя:[\s]([0-9]+)\<~\>.*/",$bad_element,$arr4);
    11. $creater = (int)$arr4[1];
    12.  
    13. preg_match("/.*ена[\s]розничная[\s]за[\s]ед\.:([0-9]+)[\s]руб\.\<br\>.*/",$bad_element,$arr5);
    14. $price = (int)$arr5[1];
    все работает... но я уверен что можно все сделать одним выражением, которое все найдет. Сам пробовал, но повторяюсь у меня с этим туго - эти выражения сочинял больше часа и еще несколько часов убил на составление одного большого - без результатов. Помогите плиз) хотя бы 2 правила склейте так чтобы работало а дальше сам справлюсь наверное
     
  2. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Подходит для обоих текстов !!!!! . ))

    PHP:
    1. <?php
    2.  
    3. ini_set('display_errors',1);
    4.  
    5. setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
    6.  
    7. $m ='<a href=/catalog/m61.html target=_blank>Кресло-кровать/Орион/Фабрика &quot;Русский мастер&quot;</a><br>
    8. Кол-во: 2<br>
    9. Материал: 3 группа, Коллекция: <b>Сьюзи Принт</b>, Название материала: <b>VesnaBordo</b>, Компаньон: <b>VesnaBordoCom</b><br>
    10. Признаки модели: <br><b>Вид ножек</b>: Без ножек<br><b>Вид покрытия</b>: Несъемные чехлы<br><b>Возможность изменения размера</b>: Возможно изменение размера<br><b>Дополнительные элементы</b>: Ящик для белья<br><b>Механизм трансформации</b>: Выкатной<br><b>Конфигурация кресла</b>: Кресло-кровать<br><b>Назначение кресла</b>: Раскладное (спальное)<br><b>Подлокотники</b>: Мягкие<br><b>Тип модульной системы</b>: Гостиная модульная<br><b>Целевое предназначение</b>: Для гостиной<br><br>
    11. Признаки изделия: <br><b>Габарит</b>: 85x96
    12. <br><b>Размер спального места</b>: 60x220
    13. <br>
    14. <#>
    15. Цена приходная за ед.:5040 руб.<br>
    16. Цена розничная за ед.:5040 руб.<br>
    17. id модели: 61<br>
    18. id производителя: 1<~>';
    19.  
    20. $p='/blanc?k\"?>(.+?)<\/a>.+?(кол-во: (\d)).+?(Цена приходная за ед\.:\d{3,5}).+?(id модели: \d{1,5}).+?(id производителя: \d{1,5})/si';
    21.  
    22.  
    23. preg_match($p,$m,$match);
    24.  
    25. echo $match[1];
    26. echo '<br>';
    27. echo $match[2];
    28. echo '<br>';
    29. echo $match[4];
    30. echo '<br>';
    31. echo $match[5];
    32. echo '<br>';
    33. echo $match[6];
    34. echo '<br>';
    35.  
    36.  
    37.  
    38.  
    39.   ?>
     
  3. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    Dima4321, спасибо, ща проверю
     
  4. kotyara

    kotyara Активный пользователь

    С нами с:
    17 фев 2010
    Сообщения:
    163
    Симпатии:
    0
    Dima4321, все работает как часы для обоих случаев. Огромная тебе благодарность =)
     
  5. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    вся суть которая объедиянет оба кода вот здесь

    blanc?k\"?

    буква с

    и кавычка "

    либо они есть либо нет
     
  6. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Не за что..))

    для меня хоть опыт какой-то.)