Помогите выпарсить регуляркой

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Изучаю рэгулярки. Парсю фрилансерский сайт)) Моя строка

Код:
<td class="il_main"><a href="/projects/131516.html" class="item">Модерация ссылок в каталоге.</a><div class="il_item_descr">Контент-менеджмент, Прочее | сегодня в 15:44</div></td>
<td class="il_small"><b class="amount_2">до 50 USD</b></td>
Мне надо соответственно загнать в первую подмаску (или как это называется :)) Урл, во вторую- заголовок, и в третью- цену. Пока что пишу так

#class=\"il_main\">(.*\</a\>).?\</b#s
Получается шляпа какая-то. Помогите, пожалуйста. Желательно с пояснениями, хочу научится это делать. Буду щелкать спасибо :)
 
Небольшое уточнение, вам нужно три маски для поиска "/projects/131516.html", "Модерация ссылок в каталоге." и "до 50 USD" отдельно?
 
да, именно :)
Код:
Контент-менеджмент, Прочее | сегодня в 15:44
это не надо. Хотя!! время тоже можно выпарсить)
 
PHP:
<?php
$str = '<td class="il_main"><a href="/projects/131516.html" class="item">Модерация ссылок в каталоге.</a><div class="il_item_descr">Контент-менеджмент, Прочее | сегодня в 15:44</div></td>
<td class="il_small"><b class="amount_2">до 50 USD</b></td>';

preg_match_all('/href=\"(.+)\" class=\"item\">(.+)<\/a><div class=\"il_item_descr\">.+<\/div><\/td>\s+<td class=\"il_small\"><b class=\"amount_2\">(.+)<\/b><\/td>/siU', $str, $match);

echo "<pre>";
print_r($match);
echo "</pre>";
?>

Я уверен, что можно сделать лучше и т.д. Но так работает. То что нужно выпарсить просто заключи в скобки (), и оно будет в отдельном элементе массива выдаваться.
 
для Phoenix168:
а про отдельно или нет не совсем понял) То есть вы спрашиваете, сделать ли три регулярки, или сделать одной? или что? Мне желательно бы чтобы одной, и результат помещался в массив, где элементы массива- результаты поиска. Но если это сильно сложно-можно и разными регулярками. Только с пояснениями, чтоб я вникал)))

для qwyjibo:
спасибо! счас хатестю. как бы мне только вникнуть коим образом это самому составлять

Добавлено через 7 минут
Не вкатило :nezn: Куча лишнего, искомого мало. Может быть потому что я привел только отрывок. Если оригинал- то это исходный код главной страницы Для просмотра ссылки Войди или Зарегистрируйся . Не парсится верным образом
 
Для составления регулярок мне очень помогает сервис
 
Вот так вроде неплохо получается:
PHP:
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1)");
curl_setopt($ch, CURLOPT_URL, 'http://www.weblancer.net/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec ($ch);
curl_close ($ch);

header("Content-Type: text/plain");

preg_match_all('/<td class=\"il_main\"><a href=\"(.+)\" class=\"item\">(.+)<\/a><div class=\"il_item_descr\">(.+)<\/div><\/td>\s+<td class=\"il_small\"><b class=\"(amount_2|unknown)\">(.+)<\/b><\/td>/', $result, $match);
print_r($match);

?>
 
Вот так вроде неплохо получается:
PHP:
<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1)");
curl_setopt($ch, CURLOPT_URL, 'http://www.weblancer.net/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec ($ch);
curl_close ($ch);

header("Content-Type: text/plain");

preg_match_all('/<td class=\"il_main\"><a href=\"(.+)\" class=\"item\">(.+)<\/a><div class=\"il_item_descr\">(.+)<\/div><\/td>\s+<td class=\"il_small\"><b class=\"(amount_2|unknown)\">(.+)<\/b><\/td>/', $result, $match);
print_r($match);

?>

почитай про PREG_SET_ORDER и PREG_PATTERN_ORDER
 
2 phillip, в атаче шпаргалка небольшая по регуляркам, может пригодится
 

Вложения

  • regular.png
    regular.png
    104 KB · Просмотры: 9
Спасибо всем. А вот еще пробую распарсить

Код:
<TD><A id=f-1_onmousedown_45 class=filename title="" href="http://depositfiles.com/files/rbv5cvrs4" DN528="0" EN528="45" zpnclick="true">ps-da3a.part8.rar</A> </TD>
<TD>

Суть в том, что у меня в конце регулярки идет </A> </TD>. А далее по тексту этих </A> </TD> еще много. Как сделать так, чтобы регулярка не шла хз куда, а останавилась на первом найденном значении?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху