|
|
|
| Добрый день.
Возникла проблема в работе Р.В., которую я не могу понять.
Есть новостной сайт, откуда берутся новости за текущую дату.
Обрабатываю Р.В
<?php
$pattern = "|<p class=\"nd3\">([\d.]+)\s([\d:]+)\s[^>]+</p>(?:<div class=\"photo\"><img[-\w\s=\",.&;:\!а-яА-Я«»]+?src=\"([^\"]+)\"[^>]+></div>)?[\s]*<p>(.+)</p>|isU";
?>
|
Работает через раз.
Привожу пример двух новостей, которые мне надо получить
<p class="nd3">10.07.2010 11:31:29 (GMT+10)</p><div class="photo"><img width="600" height="450" title="День рыбака на Камчатке – ритуал памяти "alt="День рыбака на Камчатке – ритуал памяти" src="/upload/iblock/79c/79cabc32a791660fedae2947099635f0.JPG" /></div>
<p>В рамках празднования ..........к родному причалу…<br />
<br />
Фото: Ирина ШИХОВА.<br /></p>
<p class="nd3">10.07.2010 11:30:27 (GMT+10)</p><div class="photo"><img width="600" height="450" title="Камчатка празднует День рыбака "alt="Камчатка празднует День рыбака" src="/upload/iblock/ccc/ccc2116ba8942480a1698021ff537c18.JPG" /></div>
<p>Вся Камчатка сегодня отмечает .................. молебен.<br />
<br />
Фото: Ирина ШИХОВА.<br />
<br /></p>
|
По первой новости выдаёт ошибку
Notice: Undefined offset: 1 in
Notice: Undefined offset: 2 in
Notice: Undefined offset: 3 in
Notice: Undefined offset: 4 in
По второй новости всё нормально.
Подскажите, пожалуйста, почему не считывается первая новость? | |
|
|
|
|
|
|
|
для: Slo_Nik
(11.07.2010 в 13:13)
| | Проанализировал твой код..
В первой новости "День рыбака на Камчатке – ритуал памяти "alt="День рыбака на Камчатке – ритуал памяти" У тебя есть два знака "-" (дефис).. Вся проблема из-за них. Если убрать - всё работает замечательно..
Можно так же их удалить и еще раз ввести знак дефиса с клавиатуры - тоже работает... Странный знак, который не обнаруживается =\
Есть и такой вариант:
Попробуй также оставить свой текст, но регулярку чуть поправив:
Поменять <img[-\w\s=\",.&;:\!а-яА-Я«»]+?
На:
<?php
$pattern = "........<img[\w\s=\",.&;:\!а-яА-Я«»\-–]+?....";
// Здесь \-–
//Первый знак дефиса с клавиатуры (слэш обязателен!)
//Второй скопировал из твоего текста
|
Для проверки:
Скопируй знак дефиса, который у тебя в первой новости, вставь его в любое текстовое поле (того же Google)... И рядышком введи этот же знак с клавиатуры - увидишь разницу... Парадокс
А чтобы вообще не заморачиваться, можно заменить твоё
<img[-\w\s=\",.&;:\!а-яА-Я«»]+?
НА:
<img.+(?!>src) | |
|
|
|
|
|
|
|
для: Tonik992
(11.07.2010 в 15:05)
| | Спасибо за подсказку.
Я тоже подумал о каком то символе, который не попал в символьный класс, но не думал, что это касается дефиса.
Выражение подправил, как Вы плосоветовали, но только изменил <img.+(?!>src) на <img.+(?=src=\"([^\"]+)\"), по другому не хотело возвращать изображения.
Хотя работает и так <img.+src=\"([^\"]+)\" | |
|
|
|