Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: пояните про preg_match_all

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
olegzk
Отправлено: 11 Ноября, 2017 - 15:49:39
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




Поясните, почему при парсинге одной ленты preg_match_all('#..., $a, $res) or preg_match_all('#..., $a, $res) выдает одну новость, но с другим сайтом ИЛИ не замечается и выводятся все новости, сколько preg_match_all есть, приходится break добавлять.

В чем разница?
 
 Top
Строитель Модератор
Отправлено: 11 Ноября, 2017 - 15:59:21
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




olegzk, вы можете привести пример по-подробнее?
 
 Top
olegzk
Отправлено: 11 Ноября, 2017 - 16:19:50
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




Строитель пишет:
olegzk, вы можете привести пример по-подробнее?


Ну, к примеру, с simplexml_load_file('http://....ru/rss/v2.xml') выдираю нужные новости по нескольким словам с помощью preg_match_all('#вася.+#ui', $a, $res) or $er=preg_match_all('#петя.+#ui', $a, $res). Выводится одна новость, самая свежая.

Но с такой же ленты другого сайта, OR как бы не замечается и выводятся новости по всем заданным словам. То есть, если поставить три раза preg_match_all с разными переменными, то столько материала и парсится. Решается break в конце кода, но просо хотелось бы знать причину этого.
 
 Top
Строитель Модератор
Отправлено: 11 Ноября, 2017 - 16:24:43
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал: preg_match_all('#вася.+#ui', $a, $res) or $er=preg_match_all('#петя.+#ui', $a, $res). Может быть имеет смысл подправить именно regex-шаблон?
 
 Top
olegzk
Отправлено: 11 Ноября, 2017 - 16:34:05
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




[quote=Строитель]olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал:

Не знаю, я не специалист, может так никто не делает, но решил с preg_match_all('#вася.+#ui', $a, $res) по заголовку выдирать определенные новости. Все работает нормально, в обоих случаях, новости выводятся. Только с разницей, которая описана выше. Вот эта разница и интересует, почему так.
 
 Top
Строитель Модератор
Отправлено: 11 Ноября, 2017 - 16:39:25
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




olegzk вместо двух функций можно же просто добавить "ИЛИ" внутрь шаблона:

(Добавление)
А ещё правильнее было так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('#(?:вася|петя).+#ui', $a, $res);
 
 Top
olegzk
Отправлено: 11 Ноября, 2017 - 16:47:58
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




Строитель пишет:
olegzk вместо двух функций можно же просто добавить "ИЛИ" внутрь шаблона:

(Добавление)
А ещё правильнее было так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('#(?:вася|петя).+#ui', $a, $res);


Так тоже не работает. То есть работает, но также, как раньше.

И прошу прощения, ввел в заблуждение, насчет того, что на другом сайте работает без break. Там он тоже есть. Но почему ИЛИ не работает в шаблоне, так и непонятно.

(Отредактировано автором: 11 Ноября, 2017 - 17:05:28)

 
 Top
Строитель Модератор
Отправлено: 11 Ноября, 2017 - 18:28:41
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a
 
 Top
olegzk
Отправлено: 11 Ноября, 2017 - 19:18:25
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




Строитель пишет:
olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a


$xmlfi=simplexml_load_file('http://....ru/rss/v2.xml')
foreach($xmlfi->channel->item as $item){
$a=$item->title;
 
 Top
Строитель Модератор
Отправлено: 11 Ноября, 2017 - 19:38:44
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




olegzk и что я по этому адресу, по вашему, смогу увидеть: httр://....ru/rss/v2.xml ? Радость
Не хотите ссылку светить, так соберите данные во временный массив, а после выхода из цикла - распечатайте его в браузере, и тогда будет видно, есть ли там то, что вы ищете регуляркой, или нет.
Спойлер (Отобразить)
 
 Top
olegzk
Отправлено: 11 Ноября, 2017 - 19:44:07
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017  


Помог: 0 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB