Сайт выдает примерно вот такое:
<body>bla-bla<table class="table">То что мне нужно</table>bla-bla</body>
Не сочтите меня наглым, но кто-нибудь может помочь написать нужное подходящее регулярное выражение.
Заранее спасибо.
Спустя 9 минут, 39 секунд (13.07.2011 - 14:23) Winston написал(а):
Вот так нужно тебе ?
$str = '<body>bla-bla<table class="table">То что мне нужно</table>bla-bla</body>';
$str .= '<body>bla-bla<table class="table">Что мне еще нужно</table>bla-bla</body>';
preg_match_all("#(\"|')table\\1>(.*)</table>.*#iuU", $str, $matches);
echo '<pre>';
print_r($matches[2]);
echo '</pre>';
Спустя 2 часа, 40 минут, 21 секунда (13.07.2011 - 17:03) John Cena написал(а):
да, только оно пустые массивы водит(
Спустя 4 минуты, 25 секунд (13.07.2011 - 17:08) Winston написал(а):
А если
Тоже пусто ?
И покажите точно, то, что вам нужно распарсить и выдает сайт ?
echo '<pre>';
print_r($matches);
echo '</pre>';
Тоже пусто ?
И покажите точно, то, что вам нужно распарсить и выдает сайт ?
Спустя 41 минута, 48 секунд (13.07.2011 - 17:50) John Cena написал(а):
да.
вот мое:
вседа выводит либо null либо пустые массивы
вот мое:
$str=file_get_contents("http://www.akkord-tour.com.ua/choose-me.php");
preg_match_all("#(\"|')table\\1>(.*)</table>.*#iuU", $str, $matches);
//preg_match_all("/^(.*)[class\=\"table\"](.*)[<\/table>](.*)/", $str, $matches); <-- ето я свои эксперименты проводил
echo '<pre>';
var_dump($matches);
echo '</pre>';
вседа выводит либо null либо пустые массивы
Спустя 12 минут, 26 секунд (13.07.2011 - 18:02) Winston написал(а):
А так попробуйте
PS: отредактируйте свой пост, и обрамите код тегами [php][/php]
$str=file_get_contents("http://www.akkord-tour.com.ua/choose-me.php");
preg_match_all("#>(.*)</table#iuU", $str, $matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
PS: отредактируйте свой пост, и обрамите код тегами [php][/php]
Спустя 39 минут, 9 секунд (13.07.2011 - 18:41) John Cena написал(а):
это не совсем то...
оно выводит содержимое какой-то таблицы, но не той что нужно. мне нужно взять все, что внутри таблицы с классом table. Она там самая большая... та которая "Тип тура: Автобусный/Экскурсионный"
оно выводит содержимое какой-то таблицы, но не той что нужно. мне нужно взять все, что внутри таблицы с классом table. Она там самая большая... та которая "Тип тура: Автобусный/Экскурсионный"
Спустя 10 минут, 35 секунд (13.07.2011 - 18:52) Winston написал(а):
Ну если нужно выбрать только то, что между таблицами с классом table то так
Но внутри этой таблицы, есть еще таблицы.
preg_match_all("#class=(\"|')table\\1.*>(.*)</table>#isu", $str, $matches);
Но внутри этой таблицы, есть еще таблицы.
Спустя 10 минут, 42 секунды (13.07.2011 - 19:02) John Cena написал(а):
да, спасибо большое щас получилось как нада!
Спустя 17 часов, 13 минут, 53 секунды (14.07.2011 - 12:16) John Cena написал(а):
скажите пожалуста а как сделать указать "не 'какое-то слово'"
если не понятно сказано, то вот пример:
вот то что я написал, но оно не работает:
так как я не ас, попробую описать, что я хотел этим сказать:
<td> - ищу все "<td>",
[^(<a)]*<a[^>]* - где нет "<a", до тех пор пока не встречу "<a",
[^>]*><img[^>]*> - где в "<а" есть "<img",
[^(<\/td)]*<\/td> - и после "img" может быть все кроме "<\/td", пока не встретится <\/td
и если такое будет то заменить его на "".
такое условия я пытался объяснить этим рег. выр. и ничего не получилось. сколько не искал в нете нигде не описано как сделать отрицание слова, т. е. вот это [^abc] значит, что не a,b или с, а как сказать не "abc"?
если не понятно сказано, то вот пример:
<tr>
<td><a href="/noindex"><img ... /></a></td><!-- то что нужно удалить -->
<td>
<table>
<tr><td><a href="/index">Hello</a></td></tr>
</table>
</td>
<td></td>
</tr>
вот то что я написал, но оно не работает:
$str=preg_replace("/(<td>[^(<a)]*<a[^>]*><img[^>]*>[^(<\/td)]*<\/td>)/is","",$str);
так как я не ас, попробую описать, что я хотел этим сказать:
<td> - ищу все "<td>",
[^(<a)]*<a[^>]* - где нет "<a", до тех пор пока не встречу "<a",
[^>]*><img[^>]*> - где в "<а" есть "<img",
[^(<\/td)]*<\/td> - и после "img" может быть все кроме "<\/td", пока не встретится <\/td
и если такое будет то заменить его на "".
такое условия я пытался объяснить этим рег. выр. и ничего не получилось. сколько не искал в нете нигде не описано как сделать отрицание слова, т. е. вот это [^abc] значит, что не a,b или с, а как сказать не "abc"?
Спустя 2 минуты, 42 секунды (14.07.2011 - 12:19) Winston написал(а):
То есть вы хотите удалить все ссылки если они в виде изображения ?
Спустя 24 минуты, 56 секунд (14.07.2011 - 12:44) John Cena написал(а):
да, толко не только ссылки, а и <td>, в которых они находятся
Спустя 5 минут, 21 секунда (14.07.2011 - 12:49) Winston написал(а):
Попробуй так
$str = preg_replace("#<td>\s*<\s*a.*>\s*<\s*img.*>\s*</a>\s*</td>#isuU", '', $str);
Спустя 24 минуты, 49 секунд (14.07.2011 - 13:14) John Cena написал(а):
ну сейчас оно выводит "" и все. я как бы попробовал бы сам если бы кто то сказал как сделать отрицание слова, т. е. вот это [^abc] значит, что не a,b или с, а как сказать не "abc"?
Спустя 7 минут, 48 секунд (14.07.2011 - 13:22) Winston написал(а):
Цитата (John Cena @ 14.07.2011 - 13:14) |
ну сейчас оно выводит "" |
Хм.. Странно, но у меня все работает так как ты просил, то есть вырезается <td>...</td>
Вот пример
Свернутый текст
$str = '<tr>
<td><a href="/noindex"><img ... /></a></td><!-- то что нужно удалить -->
<td>
<table>
<tr><td><a href="/index">Hello</a></td></tr>
</table>
</td>
<td><a href="/noindex">блаблабла</a></td><!-- не удалять -->
<td></td>
</tr>';
echo htmlspecialchars($str);
echo '<br>';
$str = preg_replace("#<td>\s*<\s*a.*>\s*<\s*img.*>\s*</a>\s*</td>#iuU", '', $str);
echo '<br>';
echo htmlspecialchars($str);
Спустя 35 минут, 52 секунды (14.07.2011 - 13:58) John Cena написал(а):
я когда это писал пытался поменьше писать, если на то пошло то в ячейке с
<a href="/noindex"><img ... /></a> еще может быть и <br />, в остальных ячейках со ссылками тоже может <br />, но там в ссылках только текст и никаких картинок
<a href="/noindex"><img ... /></a> еще может быть и <br />, в остальных ячейках со ссылками тоже может <br />, но там в ссылках только текст и никаких картинок
Спустя 3 минуты, 23 секунды (14.07.2011 - 14:01) Winston написал(а):
John Cena
Из ваше объяснения практически ничего не понятно. По проще объясните и покажите полную часть кода, а не
Из ваше объяснения практически ничего не понятно. По проще объясните и покажите полную часть кода, а не
Цитата (John Cena @ 14.07.2011 - 13:58) |
поменьше писать |
Спустя 50 минут, 25 секунд (14.07.2011 - 14:52) John Cena написал(а):
$str=file_get_contents("http://www.akkord-tour.com.ua/choose-me.php");//echo $str;
preg_match_all("#<table\s*class=(\"|')table\\1.*>(.*)</table>\\2#isu", $str, $matches);
$str=preg_replace("/(<td[^>]*>)/i","<td>",$matches[0][0]);
$str=preg_replace("/(<table[^>]*>)/i","<table>",$str);
$str = preg_replace("#<td>\s*<\s*a.*>\s*<\s*img.*>\s*</a>\s*</td>#isuU", '', $str);
echo ($str);
Свернутый текст
<tr>
<!-- вот отсюда --><td>
<br>
<a href="http://www.akkord-tour.com.ua/store.php/category_id/106/land_id/2"><img title="Венгрия" alt="Венгрия" src="http://www.akkord-tour.com.ua/images/flags/hu.gif"></a><br><br><a href="http://www.akkord-tour.com.ua/store.php/category_id/106/land_id/22"><img title="Хорватия" alt="Хорватия" src="http://www.akkord-tour.com.ua/images/flags/hr.gif"></a><br>
</td><!-- до сюда нужно удалить -->
<td>
<table>
<tr>
<td>
<a href="http://www.akkord-tour.com.ua/product.php/product_id/3931" style="font-weight: bold; font-size: 12px; color: rgb(160, 16, 16);">Доступная роскошь – Хорватия!</a>
<br><br>Залакарош – Ривьера Цриквеницы – Будапешт<br><br>
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td>
<span style="font-size: 14px; color: rgb(255, 0, 0); font-weight: bold;">Дата тура:</span> <span style="font-size: 14px; color: rgb(0, 0, 0); font-weight: bold;">07.08.2011</span>
</td>
<td>
<img src="http://www.akkord-tour.com.ua/images/arrow.gif"> </td>
<td>
<table>
<tr>
<td>
<span style="font-size: 13px; color: rgb(255, 0, 0); font-weight: bold;">Начало акции:</span> <span style="font-size: 13px; color: rgb(0, 0, 0); font-weight: bold;">05:30 (14.07.2011)</span>
</td>
</tr>
<tr>
<td>
<span style="font-size: 13px; color: rgb(255, 0, 0); font-weight: bold;">Окончание акции:</span> <span style="font-size: 13px; color: rgb(0, 0, 0); font-weight: bold;">22:00 (14.07.2011)</span>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
<td>
8 дней
</td>
<td>
<span class="price-old">€350.00 </span> <br><br><span style="font-size: 14px; font-weight: bold; color: rgb(0, 0, 0);">€299.00 </span><br><br>
</td>
</tr>
Спустя 11 минут, 29 секунд (14.07.2011 - 15:03) Winston написал(а):
Цитата (John Cena @ 14.07.2011 - 14:52) |
$str = preg_replace("#<td>\s*<\s*a.*>\s*<\s*img.*>\s*</a>\s*</td>#isuU", '', $str); |
Заменить на это
$str = preg_replace("#<td>.*<a.*>.*<\s*img.*</a>.*</td>#isuU", '', $str);
Спустя 1 час, 26 секунд (14.07.2011 - 16:04) John Cena написал(а):
я конешно понимаю шо я уже через чур сильно сел на шею, но теперь такой вопрос - таких участков html, который я написал выше может быть много, т.е
и сейчас у меня в таблице получается 10 строк, после
выводится только последняя <tr>, но уже очищенная как надо
<table>
<tr>html, который я написал выше</tr>
<tr>html, который я написал выше</tr>
<tr>html, который я написал выше</tr>
<tr>html, который я написал выше</tr>
<tr>html, который я написал выше</tr>
<tr>html, который я написал выше</tr>
</table>
и сейчас у меня в таблице получается 10 строк, после
preg_replace("#<td>.*<a.*>.*<\s*img.*</a>.*</td>#isuU", '', $str);
выводится только последняя <tr>, но уже очищенная как надо
Спустя 10 минут, 46 секунд (14.07.2011 - 16:14) Winston написал(а):
Цитата (John Cena @ 14.07.2011 - 16:04) |
выводится только последняя <tr>, но уже очищенная как надо |
Я не совсем понял ?
Так, что не так ?
Спустя 59 минут, 28 секунд (14.07.2011 - 17:14) John Cena написал(а):
ну вот смотрите есть таблица:
фильтрую ее:
после получается:
а мне нужно что бы после preg_replace было так:
$str='<table>
<tr №1><td>то что нужно убрать</td><td>что-то полезное</td></tr>
<tr №2><td>то что нужно убрать</td><td>что-то полезное</td></tr>
<tr №3><td>то что нужно убрать</td><td>что-то полезное</td></tr>
<tr №4><td>то что нужно убрать</td><td>что-то полезное</td></tr>
<tr №5><td>то что нужно убрать</td><td>что-то полезное</td></tr>
<tr №6><td>то что нужно убрать</td><td>что-то полезное</td></tr>
</table>';
фильтрую ее:
preg_replace("#<td>.*<a.*>.*<\s*img.*</a>.*</td>#isuU", '', $str);
после получается:
<table>
<tr №6><td>что-то полезное</td></tr>
</table>
а мне нужно что бы после preg_replace было так:
<table>
<tr №1><td>что-то полезное</td></tr>
<tr №2><td>что-то полезное</td></tr>
<tr №3><td>что-то полезное</td></tr>
<tr №4><td>что-то полезное</td></tr>
<tr №5><td>что-то полезное</td></tr>
<tr №6><td>что-то полезное</td></tr>
</table>