|
|
|
| К примеру хочю сделать отдельную табличку на главной где новости за неделю с определенного мною сайта грузились но там нету к примеру RSS ленты... как быть без регулярки не обойтись? тоесть придтся конектиться к хосту и по регулярному выражению из тего выдерать нужные мне элементы?
Подскажите как лучше , как удобнее, чтобы велосипед не изобретать? | |
|
|
|
|
|
|
|
для: sidPR
(23.05.2007 в 19:41)
| | Да, всё правильно. Можно попробовать без регулярных выражений обойтись, но не факт что так будет проще, скорее наоборот.
>> придется конектиться к хосту и из него выдирать нужные мне элементы?
Вам нужно получить код страницы, которую собрались граббить. А потом уже из этого кода выбирать нужные элементы... придираемся к словам) | |
|
|
|
|
|
|
|
для: sidPR
(23.05.2007 в 19:41)
| | Потребовать от администрации сайта создать RSS-канал. И Вам легче. И клиентам польза. | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 21:28)
| | "Потребовать" уж слово какое-то неблагозвучное.. | |
|
|
|
|
|
|
|
для: mr Bin
(23.05.2007 в 21:40)
| | Мне нужно было смайл поставить? | |
|
|
|
|
|
|
|
для: Trianon
(23.05.2007 в 22:42)
| | Да :) Было бы понятнее :) | |
|
|
|
|
|
|
|
для: mr Bin
(23.05.2007 в 22:45)
| | а можно посматреть простенький пример вывода новостей с другого хоста без rss ? | |
|
|
|
|
|
|
|
для: sidPR
(01.06.2007 в 14:48)
| | как мне сграбить инфу к примеру в середины страници есть таблица
<table cellspacing=2 cellpadding=0 class=black12>
//сдесь ифна которая мне нужна!
</table>
|
подскажите пожалуйста? | |
|
|
|
|
|
|
|
для: sidPR
(08.06.2007 в 16:10)
| |
<?php
$text = "<table cellspacing=2 cellpadding=0 class=black12>
//сдесь ифна которая мне нужна!
</table>";
preg_match("#<table cellspacing=2 cellpadding=0 class=black12>(.*)</table>#s", $text, $regs);
echo $regs[1];
?>
|
Внутри этой таблицы есть другие таблицы?
Если нет, замените (.*) на (.*?) | |
|
|
|
|
|
|
|
для: kasmanaft
(08.06.2007 в 17:38)
| | Спасибо , а если
<table cellspacing=2 cellpadding=0 class=black12>
<tr><td></td><td></td></tr>
<tr>
//сдесь ифна которая мне нужна!
</tr>
</table>
|
| |
|
|
|
|
|
|
|
для: sidPR
(08.06.2007 в 19:24)
| | Просто добавляйте эти строки "откуда" и "докуда" в рег. выражение... перенос строки - \s (вообще-то любой пробельный символ), если он может быть (а может и не быть), можно использовать \s?, если может быть несколько переносов строки - \s* | |
|
|
|
|
|
|
|
для: kasmanaft
(08.06.2007 в 20:12)
| | непонял что куда добовлять ?
в первой верхней ячейки <TR>сдесь может быть все что угодно</tR> мне ненужно ничего извлекать мне нужно только из второй как я это покажу ? | |
|
|
|
|
|
|
|
для: sidPR
(08.06.2007 в 20:18)
| | "все, что угодно" описать точнее, чем .* не получится. Показали бы полностью страницу и что из нее нужно выдернуть, было бы проще...
попробуйте вот так:
<table cellspacing=2 cellpadding=0 class=black12>\s*<tr>.*?</tr>\s*<tr>(.*)</tr>\s*</table>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(08.06.2007 в 20:28)
| | Да спасибо классно я ток не воткну как он определяют что мне нужно а что нет всмысле то что записывается в $regs[1] | |
|
|
|
|
|
|
|
для: sidPR
(08.06.2007 в 20:36)
| | Там находится то, что попадает в скобки в рег. выражении.
$regs[0] - вся строка, попавшая под рег. выражение
$regs[1] - первая скобка (и единственная тут)
$regs[2] - вторая скобка (если бы была)
и т. д. | |
|
|
|
|
|
|
|
для: kasmanaft
(08.06.2007 в 20:59)
| | понял, а если я хочю из данных в массив данные перегнать к примеру
тотже вариант
<table cellspacing=2 cellpadding=0 class=black12>
<tr>//тут заголовки колонок</tr>
<tr>
<td>вода</td>
<td>2литра</td>
<td>производитель питер :)</td>
<td>есть в наличии</td>
</tr>
<tr>
<td>Квас</td>
<td>2литра</td>
<td>производитель Томск :)</td>
<td>есть в наличии</td>
</tr>
</table>
|
вот такого рода подскажите пожалуйста как разбрасать такую инфу в массив в помощью регулярки ?
Заранее благодарю | |
|
|
|
|
|
|
|
для: sidPR
(08.06.2007 в 23:29)
| |
<?php
$string='<table cellspacing=2 cellpadding=0 class=black12>
<tr><td>жидкость</td><td>объём</td><td>производитель</td><td>наличие</td></tr>
<tr>
<td>вода</td>
<td>2литра</td>
<td>производитель питер :)</td>
<td>есть в наличии</td>
</tr>
<tr>
<td>Квас</td>
<td>2литра</td>
<td>производитель Томск :)</td>
<td>есть в наличии</td>
</tr>
</table>';
$arr=$result=array();
preg_match_all('|<td>(.+)</td>|sU',$string,$arr);
print_r($arr);
$result=array_chunk($arr[1],4);
print_r($result);
?>
|
| |
|
|
|
|
|
|
|
для: Disable
(09.06.2007 в 00:38)
| | проблема в том что шапка как раз не нужна :( tr><td>жидкость</td><td>объём</td><td>производитель</td><td>наличие</td></tr>
а все остальное надо в массив запихать .. | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 14:52)
| | Посмотрите структуру полученного массива повнимательней, или напишите массив как должно быть | |
|
|
|
|
|
|
|
для: Disable
(09.06.2007 в 15:05)
| | хорошо вроде разобрался , а <td align=center>25.02.2003</td> если в <td > встречаетсяя чтото он не обрабатывает что нужно вставить ? | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 15:20)
| | preg_match_all('|<td[^>]*>(.+)</td>|sU',$string,$arr); | |
|
|
|
|
|
|
|
для: Disable
(09.06.2007 в 15:37)
| | Че вообще все поехало :( | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 15:41)
| | вот с чем вожусь
<table cellspacing=2 cellpadding=4 class=black12 border="3">
<tr>
<td><a class=lb href='/uk/126'>МТП</a></td>
<td>ЗАО "У тпс мтп"</td>
<td align=center>22.02.2003</td>
<td align=center></td><td>адрес</td>
<td align=left>134-1340314</td><td></td><td align=center>Нет</td>
<tr>
<td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
</tr>
<tr>
<td><a class=lb href='/uk/387'>ЫЫвввы</a></td>
<td>ООО «ыфывфы»</td>
<td align=center>07.03.2007</td><td align=center></td>
<td></td>
<td align=left></td>
<td></td>
<td align=center>Нет</td>
<tr>
<td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
</tr>
<tr>
</table>
|
colspan всю малину портит :( хочю сграбить подобнуб таблицу с данными в массив =\ но изз colspan ничего не могу предпринять -\ | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 15:46)
| | про пустые ячейки вы не упоминали :)
preg_match_all('|<td[^>]*>(.*)</td>|sU',$string,$arr);
разницу видите? | |
|
|
|
|
|
|
|
для: Disable
(09.06.2007 в 16:16)
| | да понял в чем разница, а как быть с такой конструкцией где collspan на пост выше которую я написал ... ? :( | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 16:40)
| |
<?php
$string=' <table cellspacing=2 cellpadding=4 class=black12 border="3">
<tr>
<td><a class=lb href=\'/uk/126\'>МТП</a></td>
<td>ЗАО "У тпс мтп"</td>
<td align=center>22.02.2003</td>
<td align=center></td><td>адрес</td>
<td align=left>134-1340314</td><td></td><td align=center>Нет</td>
<tr>
<td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
</tr>
<tr>
<td><a class=lb href=\'/uk/387\'>ЫЫвввы</a></td>
<td>ООО «ыфывфы»</td>
<td align=center>07.03.2007</td><td align=center></td>
<td></td>
<td align=left></td>
<td></td>
<td align=center>Нет</td>
<tr>
<td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
</tr>
<tr>
</table>';
preg_match_all('|<td[^>]*>(.*)</td>|sU',$string,$arr);
print_r($arr);
?>
|
выводит
Array
(
[0] => Array
(
[0] => <td><a class=lb href='/uk/126'>МТП</a></td>
[1] => <td>ЗАО "У тпс мтп"</td>
[2] => <td align=center>22.02.2003</td>
[3] => <td align=center></td>
[4] => <td>адрес</td>
[5] => <td align=left>134-1340314</td>
[6] => <td></td>
[7] => <td align=center>Нет</td>
[8] => <td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
[9] => <td><a class=lb href='/uk/387'>ЫЫвввы</a></td>
[10] => <td>ООО «ыфывфы»</td>
[11] => <td align=center>07.03.2007</td>
[12] => <td align=center></td>
[13] => <td></td>
[14] => <td align=left></td>
[15] => <td></td>
[16] => <td align=center>Нет</td>
[17] => <td colspan="8" bgcolor=#CCCCCC><img width=1 height=1 alt=""></td>
)
[1] => Array
(
[0] => <a class=lb href='/uk/126'>МТП</a>
[1] => ЗАО "У тпс мтп"
[2] => 22.02.2003
[3] =>
[4] => адрес
[5] => 134-1340314
[6] =>
[7] => Нет
[8] => <img width=1 height=1 alt="">
[9] => <a class=lb href='/uk/387'>ЫЫвввы</a>
[10] => ООО «ыфывфы»
[11] => 07.03.2007
[12] =>
[13] =>
[14] =>
[15] =>
[16] => Нет
[17] => <img width=1 height=1 alt="">
)
) | |
|
|
|
|
|
|
|
для: Disable
(09.06.2007 в 16:42)
| | спасибо уважаемый Disable , дали пищю для мозгов ..!! | |
|
|
|
|
|
|
|
для: sidPR
(09.06.2007 в 17:01)
| |
preg_match_all('|<td[^>]*>(.*)</td>|sU',$string,$arr);
|
помогите сие регулярко почемуто не коректо пашет если между <td></td> есть таблица :(
нужно какбы вырезать только инфу которая в <td></td> не зависимой сколько таблиц если в них есть таблица то и из этой таблице тоже все <TD></td> | |
|
|
|
|
|
|
|
для: sidPR
(19.06.2007 в 23:50)
| | регулярные выражения вообще очень хреново себя ведут с данными вложенной структуры... | |
|
|
|
|
|
|
|
для: Trianon
(20.06.2007 в 00:19)
| | а как быть помогите пожалуйста? | |
|
|
|
|
|
|
|
для: sidPR
(19.06.2007 в 23:50)
| | > нужно какбы вырезать только инфу которая в <td></td> не зависимой сколько таблиц если в них есть таблица то и из этой таблице тоже все <TD></td>
То есть? Нужно вырезать все <TD></td>, в которых нет таблиц? (а вместо этого вырезать <TD></td> из этой таблицы??) | |
|
|
|
|
|
|
|
для: kasmanaft
(20.06.2007 в 08:05)
| | Нет, тоесть нужно вырезать всю инфу где встречается даже такое
<td>
<TABLE><TR><TD>TEST</TD></TR></TABLE
</td>
|
В этом примере регулярка будет вырезать примерно такой кусок "<td>
<TABLE><TR><TD>TEST" а нужно тольео слово Test вот на таких этапах регулярка работает косячно :( | |
|
|
|
|
|
|
|
для: sidPR
(20.06.2007 в 08:11)
| |
<tr><td>
<table width=100% border=0>
<tr>
<td width=45% valign=top>
<table width=100% border=0 >
<tr><td>
<font size=2><b>123456</b></font>
</td></tr>
<tr><td>
<table width=100% >
<tr><td width=50% class=newtd2 valign=top>ТЕст</td><td width=50%>321123321</td></tr>
|
нужно извлечь только то что между <td></td> в такого вида коде регулярку переклинивает и она впринцепе естественно выдерает начиная с
<td width=45% valign=top>
| к примеру захватывает
<table width=100% border=0 >
<tr><td>
<font size=2><b>123456</b></font>
|
и останавливется в первой </td> =( помагите регулярку написать которой будет пофигу на вложенности из таблиц ... примного благодарен заранее!! | |
|
|
|
|
|
|
|
для: sidPR
(20.06.2007 в 16:35)
| | я тут вычитал про "Рекурсивные шаблоны" возможно это както поможет я в регулярках полный нуб | |
|
|
|
|
|
|
|
для: sidPR
(20.06.2007 в 16:35)
| | Ндааа.... так и с ума сойти не долго :D
<?php
$text = file_get_contents('http://softtime.ru/forum/read.php?id_forum=6&id_theme=37964&page=1');
preg_match_all('#<td(?>[^>]*)>((?>((?!(<td(?>[^>]*)>|</td>)).)+)|(?R))*</td>#s', $text, $regs);
foreach($regs[0] as $val)
echo $val.str_repeat("\r\n", 15);
?>
|
| |
|
|
|
|
|
|
|
для: kasmanaft
(21.06.2007 в 14:06)
| | Гениально! супер! великолепно... многим пригодится эта регулярка, лично от меня огромное спасибо а тобы я так и извращялся бы для каждой строки своя регулярка!!! Респект вам kasmanaft! | |
|
|
|
|
|
|
|
для: sidPR
(21.06.2007 в 15:06)
| | 500 Ошибку кстате выдает =\ | |
|
|
|
|
|
|
|
для: sidPR
(21.06.2007 в 17:24)
| | Из-за file_get_contents('http://softtime.ru/fo....') ?
Не знаю.. у меня соображает долго (относительно), но работает...
(пробовал запускать в PHP Expert Editor - пустой экран, пошел в Zend Studio - там нормально отработал скрипт) | |
|
|
|
|
|
|
|
для: kasmanaft
(21.06.2007 в 18:31)
| |
<?php
set_time_limit(100);
$text = file_get_contents('http://softtime.ru/forum/read.php?id_forum=6&id_theme=37964&page=1');
preg_match_all('#<td(?>[^>]*)>((?>((?!(<td(?>[^>]*)>|</td>)).)+)|(?R))*</td>#s', $text, $arr);
echo count($arr[1]);
for($i=0; $i <= count($arr[1])-1; $i++){
echo $arr[1][$i]."<br>";
}
?>
|
500 Ошибку пишет сохраняю через zende studio
Даже без for всеравно не пашет :( | |
|
|
|
|
|
|
|
для: sidPR
(21.06.2007 в 22:04)
| | Ыыы... Попробуйте сохранить страницу, да file_get_contents('123.txt'), думаю, в этом дело.
Хотя.... рекурсия эта ресурсоемкая штука - может быть где-то чего-то не хватает, хз :(
Попробуйте, в конце концов, поменьше страницу какую-нибудь обработать.. | |
|
|
|
|
|
|
|
для: kasmanaft
(21.06.2007 в 22:21)
| | он работает но криво вырезает :( | |
|
|
|
|
|
|
|
для: sidPR
(21.06.2007 в 22:41)
| | Можно пример?
ЗЫЖ
Перечитал счас ... кое-чего не понял:
> То есть? Нужно вырезать все <TD></td>, в которых нет таблиц?
> (а вместо этого (прим. если внутри есть таблица) вырезать <TD></td> из этой таблицы??)
___________________________________________________
Нет, тоесть нужно вырезать всю инфу где встречается даже такое
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
В этом примере регулярка будет вырезать примерно такой кусок "<td>
<TABLE><TR><TD>TEST" а нужно тольео слово Test вот на таких этапах регулярка работает косячно :(
Я вроде это и имел ввиду.. Не оч понятно написал, конечно ...
Попробуйте тогда вот такую штуку: #<td[^>]*>(((?!<td[^>]*>).)*)</td>#is
(не проверял, но вроде должно работать)
Можно вместе с предыдущим его использовать...
ЗЫЖЖ если что-то опять не так понял, давайте начнем новую тему, эта уже раздулась сильно... | |
|
|
|
|