Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 12:42   #1
Dexes
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 86
По умолчанию preg_match регулярка.

Доброго времени суток.
Задача звучит так:
Есть строки подобных типов:
1)
"
Код:
<table class="standart">
    <tbody>
        <tr>
            <th colspan="2">Основные характеристики</th>
        </tr>
        <tr>
            <th><span>Тип</span></th>
            <td>ЖК-телевизор</td>
        </tr>
        <tr>
            <th><span>Диагональ</span></th>
            <td>16&quot; (41 см)</td>
        </tr>
    </tbody>
</table>
"
2)
"
Код:
<table class="l-page l-page_layout_72-20">
    <tbody>
        <tr>
            <td class="l-page__gap">&nbsp;</td>
            <td class="l-page__left">
            <table class="b-properties">
                <tbody>
                    <tr>
                        <th class="b-properties__title" colspan="2">Основные характеристики</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">16&quot; (41 см)</td>
                    </tr>
    </tbody>
</table>
"

итд
Строки со всем хламом типа пробелов, переходов каретки, стилями, классами у тегов итд
Нужно из этих строк вытащить имя параметра и его значение (к примеру "Диагональ" - "16&quot; (41 см)")
Можно ли составить регулярку которая искала бы по следующей маске
<tr*><t*>то что дергаем<*/*t*>*<t*>то что дергаем2<*/*t*>*<*/*tr>
где * - любой набор символов или же их отсутствие
?
Dexes вне форума Ответить с цитированием
Старый 09.02.2012, 13:31   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Регуляркой можно все, но может оказаться, что это не универсально и будет слишком сложным. Поэтому в данном случае я бы использовал DOM или если ресурсов у сервера достаточно, то готовый Simple HTML DOM Parser
Cronos20 вне форума Ответить с цитированием
Старый 09.02.2012, 13:46   #3
S-HaCK XORitY
Пользователь
 
Аватар для S-HaCK XORitY
 
Регистрация: 19.07.2011
Сообщений: 70
По умолчанию

Согласен с Cronos20, например так:
Код:
preg_match_all("/<t[dh].*>(.*?)<\/t[dh]>/", $subject, $matches);
не проверял, но должно работать.
Made All in China - MAC OS...
S-HaCK XORitY вне форума Ответить с цитированием
Старый 10.02.2012, 11:14   #4
Dexes
Пользователь
 
Регистрация: 27.12.2011
Сообщений: 86
По умолчанию

Код:
$template = '/<t[hd][^>]*>(<[^<>\/]+>)*([^<>\/]+)(<\/[^<>\/]+>)*<\/t[hd]>[^<>]+<t[hd][^>]*>([^<>\/]+)<\/t[hd]>/Us';
Регвар разработанный в две головы.
Dexes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярка (Sandr) PHP 2 29.05.2011 15:03
регулярка designer999 Общие вопросы Delphi 1 18.01.2011 00:49
регулярка :) Teksa Общие вопросы .NET 1 23.12.2010 17:24
preg_match(); _SERGEYX_ PHP 6 09.10.2008 09:35