Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Работа Р.В. через раз
 
 автор: Slo_Nik   (11.07.2010 в 13:13)   письмо автору
 
 

Добрый день.
Возникла проблема в работе Р.В., которую я не могу понять.
Есть новостной сайт, откуда берутся новости за текущую дату.
Обрабатываю Р.В

<?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
По второй новости всё нормально.

Подскажите, пожалуйста, почему не считывается первая новость?

  Ответить  
 
 автор: Tonik992   (11.07.2010 в 15:05)   письмо автору
 
   для: Slo_Nik   (11.07.2010 в 13:13)
 

Проанализировал твой код..
В первой новости "День рыбака на Камчатке – ритуал памяти "alt="День рыбака на Камчатке – ритуал памяти" У тебя есть два знака "-" (дефис).. Вся проблема из-за них. Если убрать - всё работает замечательно..
Можно так же их удалить и еще раз ввести знак дефиса с клавиатуры - тоже работает... Странный знак, который не обнаруживается =\
Есть и такой вариант:
Попробуй также оставить свой текст, но регулярку чуть поправив:
Поменять <img[-\w\s=\",.&;:\!а-яА-Я«»]+?
На:

<?php
$pattern 
"........<img[\w\s=\",.&;:\!а-яА-Я«»\-–]+?....";
// Здесь \-–    
//Первый знак дефиса с клавиатуры (слэш обязателен!)
//Второй скопировал из твоего текста


Для проверки:
Скопируй знак дефиса, который у тебя в первой новости, вставь его в любое текстовое поле (того же Google)... И рядышком введи этот же знак с клавиатуры - увидишь разницу... Парадокс

А чтобы вообще не заморачиваться, можно заменить твоё
<img[-\w\s=\",.&;:\!а-яА-Я«»]+?
НА:
<img.+(?!>src)

  Ответить  
 
 автор: Slo_Nik   (11.07.2010 в 21:26)   письмо автору
 
   для: Tonik992   (11.07.2010 в 15:05)
 

Спасибо за подсказку.
Я тоже подумал о каком то символе, который не попал в символьный класс, но не думал, что это касается дефиса.
Выражение подправил, как Вы плосоветовали, но только изменил <img.+(?!>src) на <img.+(?=src=\"([^\"]+)\"), по другому не хотело возвращать изображения.
Хотя работает и так <img.+src=\"([^\"]+)\"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования