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
Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
Поясните, почему при парсинге одной ленты preg_match_all('#..., $a, $res) or preg_match_all('#..., $a, $res) выдает одну новость, но с другим сайтом ИЛИ не замечается и выводятся все новости, сколько preg_match_all есть, приходится break добавлять.
В чем разница?
Строитель
Отправлено: 11 Ноября, 2017 - 15:59:21
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
olegzk, вы можете привести пример по-подробнее?
olegzk
Отправлено: 11 Ноября, 2017 - 16:19:50
Новичок
Покинул форум
Сообщений всего: 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 в конце кода, но просо хотелось бы знать причину этого.
Строитель
Отправлено: 11 Ноября, 2017 - 16:24:43
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал: preg_match_all('#вася.+#ui', $a, $res)or$er=preg_match_all('#петя.+#ui', $a, $res). Может быть имеет смысл подправить именно regex-шаблон?
olegzk
Отправлено: 11 Ноября, 2017 - 16:34:05
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
[quote=Строитель]olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал:
Не знаю, я не специалист, может так никто не делает, но решил с preg_match_all('#вася.+#ui', $a, $res) по заголовку выдирать определенные новости. Все работает нормально, в обоих случаях, новости выводятся. Только с разницей, которая описана выше. Вот эта разница и интересует, почему так.
Строитель
Отправлено: 11 Ноября, 2017 - 16:39:25
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
olegzk вместо двух функций можно же просто добавить "ИЛИ" внутрь шаблона:
Так тоже не работает. То есть работает, но также, как раньше.
И прошу прощения, ввел в заблуждение, насчет того, что на другом сайте работает без break. Там он тоже есть. Но почему ИЛИ не работает в шаблоне, так и непонятно.
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a
olegzk
Отправлено: 11 Ноября, 2017 - 19:18:25
Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Нояб. 2017
Помог: 0 раз(а)
Строитель пишет:
olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a
$xmlfi=simplexml_load_file('http://....ru/rss/v2.xml')
foreach($xmlfi->channel->item as $item){
$a=$item->title;
Строитель
Отправлено: 11 Ноября, 2017 - 19:38:44
Участник
Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014 Откуда: Украина
Помог: 73 раз(а)
olegzk и что я по этому адресу, по вашему, смогу увидеть: httр://....ru/rss/v2.xml ?
Не хотите ссылку светить, так соберите данные во временный массив, а после выхода из цикла - распечатайте его в браузере, и тогда будет видно, есть ли там то, что вы ищете регуляркой, или нет.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.