Проблема с регулярным выражением.

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

Buldozer

Новичок
Проблема с регулярным выражением.

Прошу прощения за дубль забаненой http://phpclub.ru/talk/showthread.php?s=&threadid=102459&rand=1, я просмотрел форум на тему постов о регулярных выражениях и не нашел, описания подобной проблемы.
Подскажите пожалуйста по каким ключевикам искать?

-------------------------------------------------------------------------------------------
есть регулярное выражение, с помощью которого я проверяю наличие на удаленной странице внутри тега <html></html> определенной строки:

PHP:
<?
$page = '<html><body>phpcenter.ru</body></html>'; 
preg_match_all ("/<html.*>.*phpcenter.ru*<\/html>/", $page, $matches); 
if (count($matches["0"]) > 0) echo 'в html нашли'; 
?>
для данного примера оно работает, однако если взять более реальную страницу, то не работает

PHP:
<?php 

function html_parser($url, $link) 
    { 
    $c = curl_init($url); 
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3); 
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($c, CURLOPT_TIMEOUT, 3); 
    $page = @curl_exec($c); 
    $http_result = curl_getinfo($c, CURLINFO_HTTP_CODE); 
    curl_close($c); 

    if ($http_result == '200') 
        { 
        //обработаем(проверим наличие в html, в body, в noindex) 
        $page = strtolower($page); 
        //$page = '<html><body>phpcenter.ru</body></html>'; 
        preg_match_all ("/<html.*>.*$link.*<\/html>/", $page, $matches); 
        if (count($matches["0"]) > 0) echo 'в html нашли'; 
        } 
    } 


$url = 'http://www.phpclub.ru/'; 
html_parser($url, 'phpcenter.ru'); 

?>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Обсуждения "взятия" более реальных страниц не обсуждаются по морально-этическим соображениям
 

Buldozer

Новичок
Чьим морально-этическим соображениям мешает, то, что я хочу проверять обратные ссылки на свой сайт?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Чьим морально-этическим соображениям мешает, то, что я хочу проверять обратные ссылки на свой сайт?
Это каким-то образом должно быть понятно с Вашего первого поста?

http://phpfaq.ru/regexp
 

Buldozer

Новичок
да, как раз читал оттуда, вот составил выражение: - "/<html.*>.*phpcenter.ru*<\/html>/", соответствует набору символов, у которого внутри тегов html встречается 'phpcenter.ru' - то, что мне нужно. В том примере который я привожу здесь первым, оно работает... а когда пытаюсь применить его к настоящей странице, то не работает.
 

Beavis

Banned
"не работает" - понятие растяжимое... посмотри что именно не работает и что мешает работать правильно...
 

Buldozer

Новичок
Beavis, второй кусок кода который я привел в первом скрипте соединяется забирает страницу титульную страницу c phpclub.ru, и ищет там совпадение с "phpcenter.ru внутри <html>", как я могу определить, что именно мешает этому регулярному выражению в данном случае?
 

Андрейка

Senior pomidor developer
Buldozer
[m]preg_match[/m]
там слева 2 ссылки не на функции будут.. изучи хотя бы меньшую

Mr_Max
это у него работает
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Андрейка
Если имелось ввиду более реальную страницу с текстом phpcenter.ru
то для
<html>какой-то там текст phpcenter.ru какой-то там текст</html>

приведённый паттерн
/<html.*>.*phpcenter.ru*<\/html>/
работать не будет

Именно это я и хотел сказать своим постом.
 

Buldozer

Новичок
Автор оригинала: Mr_Max
для
<html>какой-то там текст phpcenter.ru какой-то там текст</html>
приведённый паттерн
работать не будет
точку я потерял, когда комментировал проблемный скрипт - но это опечатка а не проблема.
проблема в том, что вот он код (второй в первом посте) он ищет реальную строку, на реальной странице, там нет опечаток, но это не работает.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
1. Таймаут
2. Жадность
3. preg_quote
 

Beavis

Banned
Автор оригинала: Buldozer как я могу определить, что именно мешает этому регулярному выражению в данном случае?
подумать что оно должно на самом деле выдавать и сравнить с тем, какие результаты оно выдает на самом деле.. а потом пробежаться глазами по тексту страницы и посмотреть из-за чего это может быть
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
...предварительно ознакомившись с информацией по ссылке, которую дал Андрейка
 

Buldozer

Новичок
код
PHP:
<?php

function html_parser($url, $link)
    {
    $c = curl_init($url);
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 3);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_TIMEOUT, 3);
    $page = @curl_exec($c);
    $http_result = curl_getinfo($c, CURLINFO_HTTP_CODE);
    curl_close($c);

    if ($http_result == '200')
        {
        //обработаем(проверим наличие в html, в body, в noindex)
        $page = strtolower($page);
        preg_match_all ("/<.*>/", $page, $matches);
        print_r($matches);
        if (count($matches["0"]) > 0) echo 'в html нашли';
        }
    }

$url = 'http://www.phpclub.ru/';
html_parser($url, 'phpcenter.ru');

?>
возвращает,
PHP:
Array
(
    [0] => Array
        (
            [0] => <html>
            ...
            [29] => <a class=adv href="http://phpcenter.ru/">php центр</a><br>
            ...
            [441] => </html>
        )

)
в html нашли
т.е. вот оно, все есть.

прочитал, по той ссылке Андрейки - не нашел ничего, что бы мне могло помочь.

>1. Таймаут
нет, ошибку не выводит

>2. Жадность
>>В случае, если установлена опция PCRE_UNGREEDY (отсутствующая в Perl), квантификаторы являются не жадными по умолчанию, но могут становиться жадными, если за ними следует символ '?'. Говоря другими словами, знак вопроса инвертирует жадность квантификаторов.
откровенно говоря, даже догадок нет, о чем здесь смысл.

>3. preg_quote
не помогло.

-~{}~ 10.09.07 12:01:

...предварительно ознакомившись с информацией по ссылке, которую дал Андрейка
Андрейка, Mr_Max вы там видите, что-то, что не вижу я, у вас работает это?... или просто для общего развития ссылку знаете?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху