Вот есть страница например http://xxsite.ru/page.php надо мне вытацить от туда инфу которая начинается с <td colspan="8" class="body"><div class="block-header"> тут весь интересующий меня контент и заканчивается на <td colspan="8" style="font-size: 80%;padding-left:40px"> вот помогите. как тут? вот так не получается: Помогите а? пожалуйста.
Можно попробовать так (на вскидку): PHP: $str1 = preg_quote( '<td colspan="8" class="body"><div class="block-header"> ' ); $str2 = preg_cuote( '<td colspan="8" style="font-size: 80%;padding-left:40px"> ' ); preg_match( "#".$str1 . "(.+)".$str2."#is" $text , $matches ); print_r($matches); $text - код удаленной страницы.
1. Для оформления php-кода надо использовать тег php, а не code. 2. Что-то кода очень много для столь простой операции - лень вдумываться в логику. Я не понял: зачем функция join? Во-первых, это алиас к функции implode; во-вторых, все это можно заменить на file_get_contents. 3. Вот как бы я сделал: PHP: <?php function grub($url, $start, $end) { $url = strtolower($url); if (substr_compare($url, 'http://', 0, 7) != 0) $url = 'http://'.$url; $content = @file_get_contents(urlencode($url)); if ($content === FALSE) return 'Can\'t open file.'; $startpos = strpos($content, $start); if ($startpos === FALSE) return 'Start position not found.'; $startpos += strlen($start); $endpos = strpos($content, $end, $startpos); if ($endpos === FALSE) return 'End position not found.'; return substr($content, $startpos, $endpos-$startpos); } ?>
В данном случае нет необходимости в использовании регулярных выражений. Да и (.+) не всегда работать будет. Точнее редко будет работать: символы перевода строки не входят в точку при настройках php по-умолчанию. Или это только у меня?
тег РНР глючит при обработке ампрессандов, я уже тысячу раз это говорил местным админам а изменений так и не видно...
Я добавил модификатор s в паттерн, так что все в плане строк должно быть нормально. Это как кому больше нравится... Кода - меньше - факт, быстрдействие - не думаю, что будет сильно отличаться, хотя надо тестировать. Да, и еще. Для получения удаленной страницы использовать fsockopen хотя бы уж надо, но ни как не FileSystem Functions... При определенной конфигурации работать не будет, да и при плохом канале скрипт может в /dev/null уйти.
а тут как надо сперва же получить контент да? PHP: <? $text = "$url"; $opens = fopen ($url, "r"); $data = fread ($opens, 10000000); fclose ($opens); $str1 = preg_quote( '<td colspan="8" class="body"><div class="block-header"> ' ); $str2 = preg_cuote( '<td colspan="8" style="font-size: 80%;padding-left:40px"> ' ); preg_match( "#".$str1 . "(.+)".$str2."#is" $data , $matches ); print_r($matches); ?> З.Ы все равно ниче не пахает.
PHP: <?php // Функция получения куска страницы. function grub($url, $start, $end) { $url = strtolower($url); if (substr_compare($url, 'http://', 0, 7) != 0) $url = 'http://'.$url; $content = @file_get_contents(urlencode($url)); if ($content === FALSE) return 'Can\'t open file.'; $startpos = strpos($content, $start); if ($startpos === FALSE) return 'Start position not found.'; $startpos += strlen($start); $endpos = strpos($content, $end, $startpos); if ($endpos === FALSE) return 'End position not found.'; return substr($content, $startpos, $endpos-$startpos); } //Вызов функции echo grub('http://xxsite.ru/page.php', '<td colspan="8" class="body"><div class="block-header">', '<td colspan="8" style="font-size: 80%;padding-left:40px">'); ?> Кода меньше из-за отсутствия кода получения файла и кода проверки результатов. Разницв в скорости небольшая - раз в 20-100 быстрее .
Это как раз то, о чём я говорил. Время, затраченное на получение содержимого страницы, примерно в десятки тысяч раз больше, чем на парсинг. соответственно, замена регулярных выражений на нерегулярные даст прирост в скорости скрипту в целом на тысячные доли процента. Но понять это дано не всем. цифры 20-100 раз - тоже из пальца высосаны. разница составляет 0,5-3 раза максимум.
Господа спорщики - замеры в студию! Без представления тестов, замеров и обоснованных изложений данные утверждения считаю голословными. В отдельную тему, плиз.