Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Регулярка


Автор: Just123 11.3.2012, 19:37
Доброго времени, уважаемые.

Подскажите пожалуйста,  есть строки вида:
<h2><span>ТИП</span>НАЗВАНИЕ</h2>

Мне нужно вытащить отсюда только название. 
(в названии могут присутствовать пробелы)

Никак не могу побороть регулярные выражения или может тут уместнее работа со строками?
Как решить проблему, подскажите пожалуйста.

Спасибо, за уделенное время.

Автор: Evghenusi 11.3.2012, 22:05
Код
/<h2><span>[^>]*<\/span>([^>]+)<\/h2>/si
?

Автор: ksnk 11.3.2012, 22:21
Evghenusi, 
Код

<h2>
<span id="xxx">
    It's
</span>
a trap
</h2>
<p> вавыаы fasdfpfdasd sfasdf asdfsa вафвыав </p>

?


Just123, Какие вообще данные встречаются? Примеры можно привести?

Автор: Evghenusi 11.3.2012, 23:06
Цитата(ksnk @  11.3.2012,  22:21 Найти цитируемый пост)
?

ksnk, вы автор темы? что дали с тем и работаю, появятся дополнительные условия, допилю.

Цитата(ksnk @  11.3.2012,  22:21 Найти цитируемый пост)
Примеры можно привести? 

Цитата(Just123 @  11.3.2012,  19:37 Найти цитируемый пост)
<h2><span>ТИП</span>НАЗВАНИЕ</h2>


Автор: Just123 12.3.2012, 12:34
Вообще, задача состоит в том, чтобы распарсить страницы одного каталога.

Для парсинга я решил воспользоваться библиотекой http://simplehtmldom.sourceforge.net/manual.htm.

С помощью следующего кода:
Код

$html = file_get_html('http://example.com/catalog.html');


foreach ($html->find('span') as $item_info) {
     $info[] = $item_info->plaintext;

}

$item = array_chunk($info, 4);


Я получил тип, артикул, размер и цену + немного мусорной информации, которую нужно отфильтровать.
Зная артикул, можно получить и фотографии товара т.к. это является своего рода "уникальным ключом" в названии фотографии.
Остается получить название товара.

С помощью следующего кода:

Код

foreach ($html->find('h2') as $item_name) {
     $name[] = $item_name->outertext;

}


Я получаю такие данные:

Цитата

<h2><span>Юбка</span>SILVIAN HEACH</h2><h2><span>Юбка</span>SILVIAN HEACH</h2><h2><span>Юбка</span>SILVIAN HEACH</h2><h2><span>Юбка</span>SILVIAN HEACH</h2><h2><span>Шорты</span>SILVIAN HEACH</h2><h2><span>Блуза</span>SILVIAN HEACH</h2><h2><span>Куртка</span>SILVIAN HEACH</h2><h2><span>Куртка</span>SILVIAN HEACH</h2><h2><span>Топ</span>SILVIAN HEACH</h2><h2><span>Толстовка</span>SILVIAN HEACH</h2><h2><span>Топ</span>SILVIAN HEACH</h2><h2><span>Брюки</span>SILVIAN HEACH</h2><h2><span>Футболка</span>SILVIAN HEACH</h2><h2><span>Блуза</span>SILVIAN HEACH</h2><h2><span>Блуза</span>SILVIAN HEACH</h2><h2><span>Брюки</span>SILVIAN HEACH</h2>



Можно так же получить plaintext:

Цитата

ЮбкаSILVIAN HEACHЮбкаSILVIAN HEACHЮбкаSILVIAN HEACHЮбкаSILVIAN HEACHШортыSILVIAN HEACHБлузаSILVIAN HEACHКурткаSILVIAN HEACHКурткаSILVIAN HEACHТопSILVIAN HEACHТолстовкаSILVIAN HEACHТопSILVIAN HEACHБрюкиSILVIAN HEACHФутболкаSILVIAN HEACHБлузаSILVIAN HEACHБлузаSILVIAN HEACHБрюкиSILVIAN HEACH



Но plaintext я думаю обработать будет сложнее и можно просто вытащить текст который между находиться между тегами </span> и </h2>.

Я раньше никогда не занимался парсингом HTML, да и с регулярками сложности всегда были, поэтому вопросы у меня назрели следующие:
1. Как лучше всего реализовать эту задачу? Мой подход правильный?
2. Как можно сразу все данные вытащить о товаре? В моей реализации разными функциями достигается сбор данных и их(данные) перед записью в файл, нужно правильно скомпоновать, что привносит некоторые сложности.

Благодарю за внимание и очень жду советов. smile

Автор: Evghenusi 12.3.2012, 12:56
по поводу РВ 
Код
/<h2><span>([^>]+)<\/span>([^>]+)<\/h2>/si

этот вариант врорде бы справляется, глянуть мона http://www.regexpr.ru/?pattern=%2F%3Ch2%3E%3Cspan%3E%28%5B%5E%3E%5D%2B%29%3C%5C%2Fspan%3E%28%5B%5E%3E%5D%2B%29%3C%5C%2Fh2%3E%2Fsi&subject=%3Ch2%3E%3Cspan%3E%DE%E1%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%DE%E1%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%DE%E1%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%DE%E1%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%D8%EE%F0%F2%FB%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%C1%EB%F3%E7%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%CA%F3%F0%F2%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%CA%F3%F0%F2%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%D2%EE%EF%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%D2%EE%EB%F1%F2%EE%E2%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%D2%EE%EF%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%C1%F0%FE%EA%E8%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%D4%F3%F2%E1%EE%EB%EA%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%C1%EB%F3%E7%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%C1%EB%F3%E7%E0%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E%3Ch2%3E%3Cspan%3E%C1%F0%FE%EA%E8%3C%2Fspan%3ESILVIAN+HEACH%3C%2Fh2%3E, хотя если используется Simple HTML DOM, то на регулярки можно плюнуть)

Just123, советовать ничего не буду, кроме ссылки на http://simplehtmldom.sourceforge.net/manual.htm, хотя вы наверно уже посещали его 

Автор: Just123 12.3.2012, 13:09
Цитата

этот вариант врорде бы справляется, глянуть мона тут

Да, справляется, спасибо.

Цитата

 хотя если используется Simple HTML DOM, то на регулярки можно плюнуть)

Можно было бы, но он у меня ругается нотисами, при использовании второго аргумента в функции find.

Notice: Trying to get property of non-object in E:\www\localhost\price7style\index.php on line 19

Автор: Just123 13.3.2012, 10:25
Цитата(Evghenusi)

хотя если используется Simple HTML DOM, то на регулярки можно плюнуть)

Действительно, подробнее ознакомившись с этой библиотекой, не понадобилось использование регулярных выражений. Спасибо.

P.S. На будущее, если вдруг кому еще пригодиться, http://xdan.ru/Uchimsya-parsit-saity-s-bibliotekoi-PHP-Simple-HTML-DOM-Parser.html.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)