Вобщем есть таблица на сайте. Надо выдрать только её. PHP: preg_match('@(<table width=\"640\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\">)ЗДЕСЬ НУЖНО ПРОПИСАТЬ КОД ДЛЯ ЛЮБОГО СИВОЛА - НЕ ЗНАЮ КАК(</a>[[:space:]]\n*[[:space:]]*</td>\n*[[:space:]]*</tr>\n*[[:space:]]*</table>)@i',$content,$matches); $content=$matches['0'].$matches['2'].$matches['1']; Т.Е. нам известны статичные данные - то начало таблицы (всё работает) и конец этой таблицы (тоже работает), но вот как прописать то что между ними? а в середине таблицы любые данные - абсолютно. Какоей есть универсальный символ для регулярки? А то все нереально описать (по крайней мере у меня нихрена не выходит). ПОМОГИТЕ!!!!!!!!
(.*) Вот пример : preg_match('/<!-- content -->(.*)<!-- \/content -->/s', $data[$z], $m) Вырезает между <!-- content --> и <!-- \/content --> значение берёт из переменной $data[$z] и записывает в $m
Спасибо. Чё-то не догнал. preg_match('/<table width=\"640\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\">(.*)</a>[[:space:]]\n*[[:space:]]*</td>\n*[[:space:]]*</tr>\n*[[:space:]]*</table>/s',$content,$matches); $content=$matches['0'].$matches['2'].$matches['1']; ТАК? Warning: preg_match(): Unknown modifier 'a' in y:\home\test.ru\www\files\name.php on line 13 Notice: Undefined index: 0 in y:\home\test.ru\www\files\name.php on line 13 Notice: Undefined index: 2 in y:\home\test.ru\www\files\name.php on line 13 Notice: Undefined index: 1 in y:\home\test.ru\www\files\name.php on line 13
Блин и так не пашет preg_match('/<table width=\"640\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\">(.*)<\/a>[[:space:]]\n*[[:space:]]*<\/td>\n*[[:space:]]*<\/tr>\n*[[:space:]]*<\/table>/s',$content,$matches); $content=$matches['0'].$matches['2'].$matches['1'];
В принципе так пашет: preg_match('/<table width=\"640\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\">.*/s',$content,$matches); $content=$matches['0'].$matches['2'].$matches['1']; Только ограничения нет в конеце поэтому много невидимого барахла осталяет что конечно не есть гуд.
А ИЛИ т.е. | работает в регулярке как-то не так?? Ставлю preg_match('/<table width=\"640\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\"> | <table width=\"540\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\" class=\"tableline_99_tb\" style=\"margin:10 0 10 0;\"> .*/s',$content,$matches); $content=$matches['0'].$matches['2'].$matches['1']; УЖЕ НЕ РАБОТАЕТ. Почему? Спасибо!
Возможно налету заменять один элемент из регулярки? У меня всё записывается так $content=$matches['0']; (возвращает целое значение регулярки), а есть ещё $matches['5']; - там цифры. Мне нужно прибавить к цифре 10 и запустить в целое значение, т.е. заменить в $matches['0']; только $matches['5']=$matches['5']+10; и чтобы т.е. целое значение $matches['0'] уже выдавало замененое значение $matches['5']. Такое возможно? Если да, то как?! Огромное спасибо!
Обязательно регуляркой решить эту задачу ? Входящая строка какой может иметь вид : искомая table может быть посередине, какой уникальный атрибут ее характеризует (если всередине) ? Выдрать надо с первого <tr> по последний или чтобы и <table> входила ? Текст должен быть сохранен или могут появиться закрывающие </tr>, если их не было - критично ?
Не обязательно решить регуляркой. Просто иной способ мне в данном случае не известен. Нужно выдрать таблицу с сайта (вернее всегда выдирать), и там в одном столбце есть цифры, которые нужно мне изменить +10, и чтобы в каждой ячейки этого столбца нужная цифра увеличивалась на 10. В том то и дело что до echo $matches['0']; нужно чтобы $matches['5']; = $matches['5']+10; Только ничего не получается. Если я плюсую $matches['5']+10; и echo $matches['5']; данная выходит только последняя, а не все, да и ктомуже как вставить их в $matches['0']; ??? Вот вся задача. Можно тут что-нибудь решить? Спасибо!
Ход мысли: Код (Text): $str = "bla-bla"; // строка с таблицей. $doc = new DOMDocument(); $doc->loadHTML($str); $tables = $doc->getElementsByTagName('table'); $node = $tables->item(0); echo $doc->saveHTML(); Если таблица будет не одна, то перебирать их ориентируясь на аттрибуты. Тут ман по DOM поможет .
Ничего не ясно. Сайт тот кстати отношения к xml не имеет. А как этот DOM решает проблему не разобрался. Ваш код вставил и получил ответ Fatal error: Cannot instantiate non-existent class: domdocument in ...
решил зациклить регулярку в надежде на то, что вытянет все цены из одной колонки PHP: $pwa = 1; while ($pwa <= 25) { preg_match('/(<td width=\"70\" align=\'right\'><strong><a href=\'\/fold_ru\/choose_this)(.*)(class=\"mall_list_link\">)(.*)(<\/a><\/strong><\/td>)/s',$content,$matches1); $price=$matches1['4']; print ("$price"); $pwa++; } в конечном итоге зацикливает только одну цену причём самую последнюю. Подскажите пожалуйста как правильно сделать. Я не понимаю почему выдирает только 1 цену! Там ведь ячейки по формату не отличаются, потому регулярка проходит по этой формулеровке. ПОМОГИТЕ!!!!!!!!
Стоп. А можно как-нибудь с preg_replace это реализовать? Если да то как? Как с этой функцией оперировать с числами (суммировать число +10) ??
Ну пока все программеры спят, может потратите время на то, как "DOM решает проблему" А чтобы не было фаталов - надо почитать ман и подключить нужные библиотеки (возможно хватит правки php.ini)
есть ли у таблицы id или класс за который можно зацепиться? можно будет так preg_match('#id="id"[^>]*>(.+)</table>#Usi', $content, $matches); print_r($matches); далее preg_match_all('#<td>(.+)</td>#Usi',$content, $matches); а то что никто не помогает - просто за 1 пост всю тему регулярок не объясниш
айди есть, но проблема в том что они эти айди не по порядку и совершенно различны, и их нужно сначала также выдрать чтобы сюда подставить. Собственно что говорить, вот как выглядет всё на примере одной строки: HTML: <tr bgcolor="#F3F3F3" style='cursor:hand' onMouseOver="this.style.backgroundColor='#FFD2D2'" onMouseOut="this.style.backgroundColor='#F3F3F3'"> <td width="95" align="center" ><div style="width:64px" class="box20"><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link"><img src='/42716897677_011.jpg' width='64' height='40' border='0' ></a></div></td> <td ><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link"> Rare</a></td> <td ><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link">New Hill</a></td> <td width="50" align="right" ><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link">A/T</a></td> <td width="40" align="center" class="list_link"><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link">2007</a></td> <td width="55" ><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link">Silver</a></td> <td align='right' ><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link">11,734</a></td> <td width="70" align='right'><strong><a href='/fold_ru/choice/view_detail.jsp?id=5687425' class="list_link"> 12,718</a></strong></td> <td align='center' width="80" ><a href='/fold_ru/choice/view_detail.jsp?id=5687425'><img src="expected.gif" width="49" height="11" border=0></a></td> </tr>
preg_match_all('#<strong>[^>]+\D*([\d,]+)\D*</a>#si', $var, $matches); если совсем все тяжко скинь в личку сайт и что вытянуть