[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: извлекание информации из ссылки
alex12060
Добрый день всем!
У меня снова проблема с регулярками.
Стоит задача, извлечь информацию из ссылки. Собственно, что может быть проще? Но...

есть ссылка:


<a xmlns="http://www.w3.org/1999/xhtml" title="Hotel details" class="to-hotel-information" href="/trips/productDetailsInternal?roomOptions=true&pTxId=724644&checkInDate=2012-01-13&checkOutDate=2012-01-17&guestCounts=1%2C2&tabId=information&guestCodes=ADULT%2CADULT&propertyIds=1000079707-0-5-GH%3A1%24v1v%24&configId=S72722479&city=dublin&locLink=HOTELLIST1%7CPOS1&numRooms= 2&intcmp=home1_hotels&numNights=4&dest=DUB&path=hotels&hotelRequestId=301308260553601}#details_header">
Burlington Hotel
</a>


Нужно вытащить href и то, что между тегом <a>..</a>

Составил регулярку:


preg_match_all('#<a class="to-hotel-information" href="(.*)">(.*)<\/a>#iu', $data, $res);

var_dump($res);


Выдает по нулям. Но а если убрать class="..", то выдает все ссылки (как и должно быть).

Как мне составить паттерн для парсинга для этих ссылок?



Спустя 6 минут, 38 секунд (14.01.2012 - 13:30) inpost написал(а):
<a class
Между <a и класс стоят другие символы. А ты не нашел лишь потому, что ты указал, что после <a идёт класс. Это же жесткие правила.
И ещё, убери жадный поиск

Спустя 32 минуты, 23 секунды (14.01.2012 - 14:03) alex12060 написал(а):
inpost

это понятно, но вопрос остается открытым..
как составить регулярку? что-то голова не особо варит.

Спустя 2 минуты, 55 секунд (14.01.2012 - 14:06) inpost написал(а):
alex12060
Самый дубовый - повтори всю строчку за исключением содержания в href, вот там оставь (.*)

Спустя 8 минут, 39 секунд (14.01.2012 - 14:14) alex12060 написал(а):
inpost

тоже не варик, все равно не ищет

Спустя 39 минут, 19 секунд (14.01.2012 - 14:54) alexbel2404 написал(а):
#<a.*class="to-hotel-information" href="(.*?)">(.*?)</a>#gs


может как-то так?

Спустя 5 минут, 54 секунды (14.01.2012 - 14:59) Invis1ble написал(а):
preg_match_all('#<a .* class="to-hotel-information" href="(.*)">(.*)</a>#siuU', $data, $res);

Спустя 4 минуты, 19 секунд (14.01.2012 - 15:04) Placido написал(а):
preg_match_all('#<a.*?href="(.*?)">([^<]*(?s))#iu', $data, $res);
print_r($res[1]);
print_r(array_map('trim', $res[2]));

Спустя 21 минута, 2 секунды (14.01.2012 - 15:25) Placido написал(а):
Да, я забыл вставить class="to-hotel-information" перед href.

Спустя 15 минут, 55 секунд (14.01.2012 - 15:41) Семён написал(а):
preg_match_all('#class="to-hotel-information" href="(.*)"#iu',$string,$results);


Спустя 3 часа, 55 минут (14.01.2012 - 19:36) Dron19 написал(а):

$a = "
<a xmlns=
\"http://www.w3.org/1999/xhtml\" title=\"Hotel details\" class=\"to-hotel-information\" href=\"/trips/productDetailsInternal?roomOptions=true&pTxId=724644&checkInDate=2012-01-13&checkOutDate=2012-01-17&guestCounts=1%2C2&tabId=information&guestCodes=ADULT%2CADULT&propertyIds=1000079707-0-5-GH%3A1%24v1v%24&configId=S72722479&city=dublin&locLink=HOTELLIST1%7CPOS1&numRooms= 2&intcmp=home1_hotels&numNights=4&dest=DUB&path=hotels&hotelRequestId=301308260553601}#details_header\">
Burlington Hotel
</a>"
;
$b = preg_replace("#<a.*href=(\"|')(.*?)('|\").*>(.*)</a>#isu", "\\2|\\4", $a);
$b = explode("|",$b);
print_r($b);


Спустя 2 часа, 39 минут, 9 секунд (14.01.2012 - 22:15) killer8080 написал(а):
alex12060
проверяй
Свернутый текст
$t = ' 
<a xmlns="http://www.w3.org/1999/xhtml" title="Hotel details" class="to-hotel-information" href="/trips/productDetailsInternal?roomOptions=true&pTxId=724644&checkInDate=2012-01-13&checkOutDate=2012-01-17&guestCounts=1%2C2&tabId=information&guestCodes=ADULT%2CADULT&propertyIds=1000079707-0-5-GH%3A1%24v1v%24&configId=S72722479&city=dublin&locLink=HOTELLIST1%7CPOS1&numRooms= 2&intcmp=home1_hotels&numNights=4&dest=DUB&path=hotels&hotelRequestId=301308260553601}#details_header">
Burlington Hotel
</a>

<a href="http://ya.ru" class="to-hotel-information">
yandex
</a>
'
;

preg_match_all(
'#<a[^>]+(?:(?:class="to-hotel-information"[^>]+href="(.*)")|(?:href=&q uot;(.*)"[^>]+class="to-hotel-information"))[^>]*>(.*)</a>#isuU',
$t,
$m,
PREG_SET_ORDER
);
echo '<pre>'.htmlspecialchars(print_r($m, 1)).'</pre>';

только исправь &q uot; на обычную кавычку "

Спустя 12 часов, 25 минут (15.01.2012 - 10:40) alex12060 написал(а):
ребят, спасибо всем!

поспал и понял, что странна запись та, которая представлена вам.
Залез во внутрь, оказалось, что там идет сначала хреф, потом класс, при том, ссылки дублируются для разных элементов, поэтому, я решил парсить див контейнеры.

Спустя 2 часа, 1 минута, 26 секунд (15.01.2012 - 12:41) killer8080 написал(а):
Цитата (alex12060 @ 15.01.2012 - 09:40)
оказалось, что там идет сначала хреф, потом класс

Ну так я и дал вариант в котором пофиг порядок атрибутов wink.gif

Спустя 1 час, 2 минуты, 51 секунда (15.01.2012 - 13:44) alex12060 написал(а):
killer8080

ах да, у меня твой вариант просто вывел пустой массив)

Спустя 48 минут, 38 секунд (15.01.2012 - 14:33) killer8080 написал(а):
Цитата (alex12060 @ 15.01.2012 - 12:44)
ах да, у меня твой вариант просто вывел пустой массив)

А ты исправлял в нем регулярку?
Форум её немного по коверкал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.