Вытащить данные из сайта

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

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

    smertnik Постоялец

    Регистр.:
    5 июн 2006
    Сообщения:
    68
    Симпатии:
    30
    Здравствуйте.

    Пишу регулярку для разбора сайта http://tender.mos.ru/pgz/tender.aspx
    PHP:
    preg_match_all('`<tr id="[^"]+">\s*<td>\s*<a [^>]+>.+?</a>\s*</td>\s*<td>\s*.*?<br />\s*<a [^>]+href="([^"]+)">\s*([^<]+)</a>\s*</td>\s*<td>(.*)[^]+<br[^>]+>(<b style[^<]+</b>\s*|\s*)</td>\s*\s*<td>([^<]+)</td>\s*<td>([^<]+)</td>\s*<td>[^<+]*</td>\s*<td>[^<]+</td>\s*<td>([^<]+)</td>\s*<td>([^<]+)</td>`si'$res_page$customers)
    Вот только пытаюсь запустить на сервере, в итоге пустой массив. Проверяю на сайте http://gskinner.com/RegExr/, работает как часы.

    Есть такой еще вариант
    PHP:
    preg_match_all('`<tr id="[^"]+">\s*<td>\s*<a [^>]+>.+?</a>\s*</td>\s*<td>\s*.*?<br />\s*<a [^>]+href="([^"]+)">\s*([^<]+)</a>\s*</td>\s*<td>(.*?)\s*<[^<]+?>.*\s*<[^<]+?>\s*</td>\s*<td>([^<]+)</td>\s*<td>([^<]+)</td>\s*<td>[^<+]*</td>\s*<td>[^<]+</td>\s*<td>([^<]+)</td>\s*<td>([^<]+)</td>`si'$res_page$customers)
    , он работает, но один из столбцов таблицы может быть 2х видов, поэтому добавил в регулярку
    PHP:
    '(<b style[^<]+</b>\s*|\s*)'
    , но работать отказывается.

    Первый вариант:
    Код:
    <td> ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ ЗДРАВООХРАНЕНИЯ ГОРОДА МОСКВЫ ГОРОДСКАЯ КЛИНИЧЕСКАЯ БОЛЬНИЦА № 13 ДЕПАРТАМЕНТА ЗДРАВООХРАНЕНИЯ Г.МОСКВЫ
                    <br /><b>торги проводит государственный заказчик</b>
                    <br /><b style="color: Red;"> заказ размещается среди субъектов малого предпринимательства </b>
                    </td>
    
    Второй вариант:
    Код:
    <td> ГОСУДАРСТВЕННОЕ УЧРЕЖДЕНИЕ УПРАВА ЛОСИНООСТРОВСКОГО РАЙОНА  ГОРОДА МОСКВЫ
                    <br /><b>торги проводит государственный заказчик</b>
                    <br />
                    </td>
    
     
  2. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Поправил критические ошибки в регулярке, теперь попробуй
    Код:
    $re='
    {
    <tr\ id="[^"]+">\s*
    
    <td>\s*<a\ [^>]+>.+?</a>\s*</td>\s*
    <td>\s*.*?<br\ />\s*<a\ [^>]+href="([^"]+)">\s*([^<]+)</a>\s*</td>\s*
    <td>(.*?)<br[^>]+>(<b style[^<]+</b>\s*|\s*)</td>\s*
    <td>([^<]+)</td>\s* 
    <td>([^<]+)</td>\s*
    <td>[^<+]*</td>\s*
    <td>[^<]+</td>\s*
    <td>([^<]+)</td>\s*
    <td>([^<]+)</td>
    }six';
    
     
    smertnik нравится это.
  3. smertnik

    smertnik Постоялец

    Регистр.:
    5 июн 2006
    Сообщения:
    68
    Симпатии:
    30
    Вот доработал, может кому пригодится, пока полет нормальный)
    PHP:
    preg_match_all('`<tr id="[^"]+">\s*<td>\s*<a [^>]+>.+?</a>\s*</td>\s*<td>\s*.*?<br />\s*<a [^>]+href="([^"]+)">\s*([^<]+)</a>\s*</td>\s*<td>(.*?)\s*<[^<]+?>.*\s*<[^<]+?>(?:<b style[^<]+</b>\s*|\s*)</td>\s*<td>([^<]+)</td>\s*<td>([^<]+)</td>\s*<td>(?:[^<]+<a[^<]+</a>[^<]+|[^<+]*)</td>\s*<td>(?:[^<]+<a[^<]+</a>[^<]+|[^<+]*)</td>\s*<td>([^<]+<a[^<]+</a>[^<]+|[^<+]*)</td>\s*<td>([^<]+<a[^<]+</a>[^<]+|[^<]+)</td>`'$res_page$customers)
     
  4. MyGoogle

    MyGoogle Прохожие

    Пропробуй мануал почитать
     
Статус темы:
Закрыта.