Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Подскажите по регулярке.
Новая тема
Ответить
цитата
08/05/14 в 12:07
Lexikon
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>
не могу понять, где ошибка
Спасибо!
цитата
08/05/14 в 12:44
shlemkin
preg_match_all('~<a href="(.+\.jpg)"><img src="(.+\.jpg)"[^>]+></a>~iU', $resultPage, $arrResult);
расскажешь потом, работает или нет
цитата
08/05/14 в 14:13
Lexikon
всё тоже самое как и у меня
цитата
08/05/14 в 14:52
Alexandur
Потсаны рекомендуют дом.
$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 />";
}
цитата
08/05/14 в 15:33
freeek
Если не критично по производительности, то пользуюсь такой штукой
Ganon
Код:
preg_match_all('%<a href="(.+\.jpg)"[^>]*><img src="(.+\.jpg)"[^>]*><\/a>%isU', $resultPage, $arrResult);
не панацея, сорс может быть немного другим и правило не сработает
не забываем про
жадность
квалификаторов
цитата
09/05/14 в 03:48
Mika
Lexikon писал:
не могу понять, где ошибка
Знак вопроса "?" после звездочки ставь.
Почитай Mastering Regular Expressions. "Лучше день потерять, потом за 5 минут долететь." (с)
P.S. И html лучше xpath'ом парсить.
Update: не заметил сразу в коде модификатор U, так что по идее должно работать как раз без "?", ибо он инвертирует "жадность".
Последний раз редактировалось: Mika (
09/05/14 в 04:04
), всего редактировалось 2 раз(а)
цитата
09/05/14 в 03:49
Mika
freeek писал:
жадность квалификаторов
И кого они квалифицируют?
цитата
09/05/14 в 12:28
freeek
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>';
цитата
09/05/14 в 14:42
Mika
freeek писал:
Квалификаторы говорят о том, сколько раз последовательность символов может встретиться в строке и указываются непосредственно после той части выражения, к которой они применяются
Ты б хоть ссылку давал, где такое пишут.
Вот они трудности перевода. Каким образом
quantifier
можно перевести как
квалификатор
? А
quantification
как "спецы" переводят -
квалификация
?
цитата
09/05/14 в 15:19
freeek
Mika писал:
Ты б хоть ссылку давал, где такое пишут.
Вот они трудности перевода. Каким образом
quantifier
можно перевести как
квалификатор
? А
quantification
как "спецы" переводят -
квалификация
?
все верно, сам оговорился и оговорку привел в цитате, конечно квантификатор, мы же кол-во считаем)
цитата
10/05/14 в 09:00
Lexikon
похоже самый заебенный вариант это работа с DOM/
начал ковырять мануал. Вот только не пойму
есть
$path = $xpath->query("//a/img");
используем
foreach($path as $href)
Это для прохода по массиву, НО!
Почему когда я вызываю
print_r($path);
Мне возвращает
DOMNodeList Object ( [length] => 34 )
34 это как я понял кол-во тех самых элементов
Я почему то подумал что $path - это массив и его можно отобразить через print_r()
цитата
10/05/14 в 13:33
Alexandur
Там где стрелочки -> там объекты.
print_r(get_object_vars($path))
цитата
10/05/14 в 17:35
Mika
Lexikon писал:
начал ковырять мануал.
Я почему то подумал что $path - это массив и его можно отобразить через print_r()
Мануал лучше не ковырять, а читать и понимать
http://www.php.net/manual/ru/domxpath.query.php
Цитата:
Возвращаемые значения
Возвращает объект DOMNodeList содержащий узлы, отвечающие условиям отбора в XPath expression. Любой запрос, не возвращающий узлов, вернет пустой объект DOMNodeList.
цитата
26/05/14 в 17:02
Defolt
freeek писал:
Если не критично по производительности, то пользуюсь такой штукой
Ganon
Такой парсер использую, удобно.
PHP Simple HTML DOM Parser
цитата
27/05/14 в 09:07
AWD
прикол в том, что у меня код ТС работает. "U" - усмиряет жадность. мне вообще не понятно, что за х...
Новая тема
Ответить
Эта страница в полной версии