У меня снова проблема с регулярками.
Стоит задача, извлечь информацию из ссылки. Собственно, что может быть проще? Но...
есть ссылка:
<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 идёт класс. Это же жесткие правила.
И ещё, убери жадный поиск
Между <a и класс стоят другие символы. А ты не нашел лишь потому, что ты указал, что после <a идёт класс. Это же жесткие правила.
И ещё, убери жадный поиск
Спустя 32 минуты, 23 секунды (14.01.2012 - 14:03) alex12060 написал(а):
inpost
это понятно, но вопрос остается открытым..
как составить регулярку? что-то голова не особо варит.
это понятно, но вопрос остается открытым..
как составить регулярку? что-то голова не особо варит.
Спустя 2 минуты, 55 секунд (14.01.2012 - 14:06) inpost написал(а):
alex12060
Самый дубовый - повтори всю строчку за исключением содержания в href, вот там оставь (.*)
Самый дубовый - повтори всю строчку за исключением содержания в 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
проверяй
только исправь &q uot; на обычную кавычку "
проверяй
Свернутый текст
$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) |
оказалось, что там идет сначала хреф, потом класс |
Ну так я и дал вариант в котором пофиг порядок атрибутов

Спустя 1 час, 2 минуты, 51 секунда (15.01.2012 - 13:44) alex12060 написал(а):
killer8080
ах да, у меня твой вариант просто вывел пустой массив)
ах да, у меня твой вариант просто вывел пустой массив)
Спустя 48 минут, 38 секунд (15.01.2012 - 14:33) killer8080 написал(а):
Цитата (alex12060 @ 15.01.2012 - 12:44) |
ах да, у меня твой вариант просто вывел пустой массив) |
А ты исправлял в нем регулярку?
Форум её немного по коверкал.