Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 08/05/14 в 12:07 |
Код: [развернуть] | preg_match_all('|<a href="(.*.jpg)"><img src="(.*.jpg)" [A-Za-z="0-9\s]+><\/a>|iU', $resultPage, $arrResult); |
Хотел с галереи спарсить тумбы и изображения, всё бы хорошо, но выдерается вот так:
Код: [развернуть] | <a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a></td><td width=174><a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a></td><td width=174><a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a> |
т.е. берет вместе с такими кусками </td><td width=174>
не могу понять, где ошибка
Спасибо!
|
|
|
|
+ + +
С нами с 18.03.14
Сообщения: 43
Рейтинг: 30
|
Добавлено: 08/05/14 в 12:44 |
preg_match_all('~<a href="(.+\.jpg)"><img src="(.+\.jpg)"[^>]+></a>~iU', $resultPage, $arrResult);
расскажешь потом, работает или нет
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 08/05/14 в 14:13 |
всё тоже самое как и у меня
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 08/05/14 в 14:52 |
Потсаны рекомендуют дом.
Код: [развернуть] |
$src = 'Код: [свернуть]
<a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a></td><td width=174><a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a></td><td width=174><a href="00.jpg"><img src="th_00.jpg" width="160" height="106" border="0" alt="text"></a>';
$dom = new DomDocument();
$dom->loadHTML($src);
$xpath = new DomXPath($dom);
$path = $xpath->query("//a/img");
foreach($path as $href)
{
echo $href->parentNode->getAttribute('href')."<br />";
echo $href->getAttribute('src') ."<br />";
}
|
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 08/05/14 в 15:33 |
Если не критично по производительности, то пользуюсь такой штукой Ganon
Код: | preg_match_all('%<a href="(.+\.jpg)"[^>]*><img src="(.+\.jpg)"[^>]*><\/a>%isU', $resultPage, $arrResult); |
не панацея, сорс может быть немного другим и правило не сработает
не забываем про жадность квалификаторов
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 09/05/14 в 03:48 |
Lexikon писал: | не могу понять, где ошибка |
Знак вопроса "?" после звездочки ставь.
Почитай Mastering Regular Expressions. "Лучше день потерять, потом за 5 минут долететь." (с)
P.S. И html лучше xpath'ом парсить.
Update: не заметил сразу в коде модификатор U, так что по идее должно работать как раз без "?", ибо он инвертирует "жадность".
Последний раз редактировалось: Mika (09/05/14 в 04:04), всего редактировалось 2 раз(а)
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 09/05/14 в 03:49 |
freeek писал: | жадность квалификаторов |
И кого они квалифицируют?
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 09/05/14 в 12:28 |
Mika писал: | И кого они квалифицируют? |
Цитата: | Квалификаторы говорят о том, сколько раз последовательность символов может встретиться в строке и указываются непосредственно после той части выражения, к которой они применяются |
по умолчанию они жадные, захватят всё, что собственно и произошло
Код: | $testString = 'aaaaaaa.jpg aaaaa.jpg';
preg_match('%.+\.jpg%', $testString, $match);
echo '<pre>', print_r($match, true), '</pre>';
preg_match('%.+\.jpg%U', $testString, $match);
echo '<pre>', print_r($match, true), '</pre>';
preg_match('%.+?\.jpg%', $testString, $match);
echo '<pre>', print_r($match, true), '</pre>'; |
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 09/05/14 в 14:42 |
freeek писал: | Квалификаторы говорят о том, сколько раз последовательность символов может встретиться в строке и указываются непосредственно после той части выражения, к которой они применяются |
Ты б хоть ссылку давал, где такое пишут.
Вот они трудности перевода. Каким образом quantifier можно перевести как квалификатор? А quantification как "спецы" переводят - квалификация?
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 09/05/14 в 15:19 |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 10/05/14 в 09:00 |
похоже самый заебенный вариант это работа с DOM/
начал ковырять мануал. Вот только не пойму
есть
Код: [развернуть] | $path = $xpath->query("//a/img"); |
используем
Это для прохода по массиву, НО!
Почему когда я вызываю
Мне возвращает
DOMNodeList Object ( [length] => 34 )
34 это как я понял кол-во тех самых элементов
Я почему то подумал что $path - это массив и его можно отобразить через print_r()
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 10/05/14 в 13:33 |
Там где стрелочки -> там объекты.
print_r(get_object_vars($path))
|
|
|
|
С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365
|
Добавлено: 10/05/14 в 17:35 |
Lexikon писал: | начал ковырять мануал.
Я почему то подумал что $path - это массив и его можно отобразить через print_r() |
Мануал лучше не ковырять, а читать и понимать
http://www.php.net/manual/ru/domxpath.query.php
Цитата: | Возвращаемые значения
Возвращает объект DOMNodeList содержащий узлы, отвечающие условиям отбора в XPath expression. Любой запрос, не возвращающий узлов, вернет пустой объект DOMNodeList. |
|
|
|
|
С нами с 17.01.06
Сообщения: 146
Рейтинг: 197
|
Добавлено: 26/05/14 в 17:02 |
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 27/05/14 в 09:07 |
прикол в том, что у меня код ТС работает. "U" - усмиряет жадность. мне вообще не понятно, что за х...
|
|
|
|