Написал граббер для одного сайта для удобного чтения с планшета, до этого с регулярками не работал. Граббер работает, но в error_log постоянно сыплются ошибки Undefined offset для всех массивов, полученных из preg_match. Вот для примера: Код (Text): preg_match('/<div class=\"pages\">(.*?)<\/div>/ims',$data,$matches); //$data - это текст страницы, полученный curl-ом $pager=$matches[1]; //вот на эту строку ругается Undefined offset: 1 echo '<div class="pager">'.$pager.'</div>'; //при этом тут все выводит правильно При этом count($matches) выдает 2, print_r($matches) тоже выводит 2 элемента массива (полный текст совпадения шаблона и нужную строку). В гугле был - ничего не нашел. P.S. phpversion() выдает 5.3.15
фигня какая-то... если добавляю вашу строчку с if (что у вас скобочки не хватает я заметил), то условие не выполняется и ничего не выводит... без if, выводит: array(2) { [0]=> string(1182) "{тут очень большой текст всей строки}" [1]=> string(1157) "{тут очень большой текст искомой подстроки}" } Я думаю проблема с объявлением переменной, но как объявить $matches перед выполнением? P.S. попробовал перед preg_match объявить $matches = array(); - не помогло.
да не. в матчес каждый раз новое пишется. ну короче надо как-то отловить что внутри матчес в тот момент, когда ругается.
хм... а var_dump - это не показатель? после моего кода с var_dump я обращаюсь ко второму элементу массива matches[1] и получаю ошибку в лог.
Сделал по-другому: написал новый скрипт, чтобы показать вывод полностью. Скрипт полностью: Код (Text): <?php $data = "qwerty #asd# zxcvb"; preg_match('/#(.*?)#/ims',$data,$matches); if (!isset($matches[1])) { var_dump($matches); } else { echo 'нет первого элемента <br>'; }; var_dump($matches); echo '<br>'.$matches[1]; ?> Вывод полностью: Код (Text): нет первого элемента array(2) { [0]=> string(5) "#asd#" [1]=> string(3) "asd" } asd Сообщение в error_log при обновлении этой страницы: Код (Text): Undefined offset: 1 in /srv/www/test/test.php on line 6
if (!isset($matches[1])) { var_dump($matches); } else { echo 'ЕСТЬ первого элемента <br>'; }; но вообще конечно странно
Обновил в системе все пакеты с *php* - не помогло, обновил вобще все пакеты на тестовой копии - перестало выдавать сообщения в логи. phpversion по-прежнему выдает 5.3.15. Какой модуль отвечает за регулярки? А то боязно тотально обновлять боевой сервер.