[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_match_all
Страницы: 1, 2
Frost-56
Как правильно написать парсер для большого текста?

Код который нужно распарсить:

<img src="http://site.biz/images/sellforum/statusicon/thread_new.gif" id="любой текст" alt="" border=""/>
</td>
<td
class="alt2"><img src="images/icons/icon1.gif" alt="" border="0"/></td>
<td
class="alt1" id="любой текст" title="любой текст">
<div>
<a
href="любой текст" id="любой текст"><img class="inlineimg" src="http://site.biz/images/sellforum/buttons/firstnew.gif" alt="К первому новому сообщению" border="0"/></a>
<a
href="showthread.php?t=любая цифра" id="любой текст" style="font-weight:bold">Это нужно</a>
</div>


Где

<a href="любой текст" id="любой текст"><img class="inlineimg" src="http://site.biz/images/sellforum/buttons/firstnew.gif" alt="К первому новому сообщению" border="0"/></a>

Надо пропустить.


P.S. нужен парсер новых тем для vbulletin, новая тема проверяется картинкой http://site.biz/images/sellforum/statusicon/thread_new.gif


Помогите плиз
bestxp
так у булки же была rss почему бы не использовать её?
killer8080
Frost-56
так попробуй
$regexp = '#<tr> 
(?:(?<!</tr|<tr).)+
<img\s+src="http://site.biz/images/sellforum/statusicon/thread_new.gif"[^>]*>
(?:(?<!</tr|<tr).)+
<a\s+href="showthread.php\?t=(\d+)"[^>]*>(.*)</a>
(?:(?<!</tr|<tr).)+
</tr>#isUux'
;
Frost-56
Думаю нет смысла скрывать сайт.

Вот мой код, не работает:

<?php
$url = 'http://fsell.biz/forumdisplay.php?f=29';

$content = file_get_contents($url);
preg_match_all('#<tr>
(?:(?<!</tr|<tr).)+
<img\s+src="http://site.biz/images/sellforum/statusicon/thread_new.gif"[^>]*>
(?:(?<!</tr|<tr).)+
<a\s+href="showthread.php\?t=(\d+)"[^>]*>(.*)</a>
(?:(?<!</tr|<tr).)+
</tr>#isUux'
, $content, $match);
print_r($match);

?>



Выводит: Array ( [0] => Array ( ) [1] => Array ( ) [2] => Array ( ) )
Frost-56
Помогите плз
Frost-56
Ау, ребят
killer8080
Frost-56
$url = 'http://fsell.biz/forumdisplay.php?f=29'; 
$context = stream_context_create(array(
'http' => array(
'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".
"bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
"bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".
"bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
)
));

$content = file_get_contents($url, false, $context);
preg_match_all(
'#<tr>
(?:(?<!</tr|<tr).)+
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*> ;
(?:(?<!</tr|<tr).)+
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>
(?:(?<!</tr|<tr).)+
</tr>#isUux'
, $content, $match);

echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';
Frost-56
Цитата (killer8080 @ 17.03.2014 - 18:18)
Frost-56
$url = 'http://fsell.biz/forumdisplay.php?f=29'; 
$context = stream_context_create(array(
'http' => array(
'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".
"bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
"bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".
"bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
)
));

$content = file_get_contents($url, false, $context);
preg_match_all(
'#<tr>
(?:(?<!</tr|<tr).)+
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*> ; ;
(?:(?<!</tr|<tr).)+
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>
(?:(?<!</tr|<tr).)+
</tr>#isUux'
, $content, $match);

echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';

Array
(
[0] => Array
(
)

[1] => Array
(
)

[2] => Array
(
)

)
killer8080
две лищние точки с запятой
Цитата (Frost-56 @ 18.03.2014 - 10:33)
$url = 'http://fsell.biz/forumdisplay.php?f=29';
$context = stream_context_create(array(    'http' => array(
        'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".                    "bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
                  "bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".                    "bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
    ) ));
$content = file_get_contents($url, false, $context); preg_match_all(
'#<tr>  (?sad.gif?<!</tr|<tr).)+ 
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*> ; ;    (?sad.gif?<!</tr|<tr).)+ 
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>  (?sad.gif?<!</tr|<tr).)+ 
</tr>#isUux', $content, $match);
echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';

Frost-56
Цитата (killer8080 @ 18.03.2014 - 15:51)
две лищние точки с запятой
Цитата (Frost-56 @ 18.03.2014 - 10:33)
$url = 'http://fsell.biz/forumdisplay.php?f=29';
$context = stream_context_create(array(     'http' => array(
        'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".                    "bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
                   "bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".                    "bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
    ) ));
$content = file_get_contents($url, false, $context); preg_match_all(
'#<tr>  (?sad.gif?<!</tr|<tr).)+ 
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*> ; ;    (?sad.gif?<!</tr|<tr).)+ 
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>  (?sad.gif?<!</tr|<tr).)+ 
</tr>#isUux', $content, $match);
echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';

Ошибка в 3 строке

Parse error: syntax error, unexpected T_STRING, expecting ')' in /home/htdocs/test/test.php on line 3
killer8080
Frost-56
ну ты же не копируй цитату со смайликами smile.gif
Frost-56
я без смайлов копировал, вот код:

<?php
$url = 'http://fsell.biz/forumdisplay.php?f=29';
$context = stream_context_create(array(    'http' => array(
        'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".                    "bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
                  "bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".                    "bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
    ) ));
$content = file_get_contents($url, false, $context); preg_match_all(
'#<tr>  (?:(?<!</tr|<tr).)+ 
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*> ; ; ;    (?:(?<!</tr|<tr).)+ 
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>  (?:(?<!</tr|<tr).)+ 
</tr>#isUux'
, $content, $match);
echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';

?>
killer8080
Frost-56
не надо ничего копировать, нужно было просто регулярку подправить.
Кстати посмотри на свой пост, там уже тройной ; ; ; smile.gif
Frost-56
Убрал, не помогло, та же ошибка, дайте плиз норм код) с меня ++ в карму)
killer8080
я давал рабочий вариант, это форум ломает код свои форматированием, добавляет лишнюю точку запятой.
$url = 'http://fsell.biz/forumdisplay.php?f=29';  
$context = stream_context_create(array(
'http' => array(
'header'=> "Cookie: __cfduid=d50ecd5ba370ba97cf0821f5a4c489bf31395057659203; ".
"bbsessionhash=3e50f1807db6c160f1a9774ecb5abbbe; ".
"bbforum_view=2565903ffede8904e273544b8a0e0ba741282aafa-1-%7Bi-29_i-1395057659_%7D; ".
"bblastvisit=1395057659; bblastactivity=0; kd41d8=902caed490e4e20dd0813623031650bc\n"
)
));
$content = file_get_contents($url, false, $context);
preg_match_all(
'#<tr>
(?:(?<!</tr|<tr).)+
<img\s+src="http://fsell.biz/images/sellforum/statusicon/thread_new.gif"[^>]*>
(?:(?<!</tr|<tr).)+
<a\s+href="(showthread.php\?t=\d+)"[^>]*>(.*)</a>
(?:(?<!</tr|<tr).)+
</tr>#isUux', $content, $match);

echo '<pre>'. htmlspecialchars(print_r($match, 1)) . '</pre>';
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.