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
Форумы портала PHP.SU :: Версия для печати :: пояните про preg_match_all
Форумы портала PHP.SU » » Вопросы новичков » пояните про preg_match_all

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

1. olegzk - 11 Ноября, 2017 - 15:49:39 - перейти к сообщению
Поясните, почему при парсинге одной ленты preg_match_all('#..., $a, $res) or preg_match_all('#..., $a, $res) выдает одну новость, но с другим сайтом ИЛИ не замечается и выводятся все новости, сколько preg_match_all есть, приходится break добавлять.

В чем разница?
2. Строитель - 11 Ноября, 2017 - 15:59:21 - перейти к сообщению
olegzk, вы можете привести пример по-подробнее?
3. olegzk - 11 Ноября, 2017 - 16:19:50 - перейти к сообщению
Строитель пишет:
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 в конце кода, но просо хотелось бы знать причину этого.
4. Строитель - 11 Ноября, 2017 - 16:24:43 - перейти к сообщению
olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал: preg_match_all('#вася.+#ui', $a, $res) or $er=preg_match_all('#петя.+#ui', $a, $res). Может быть имеет смысл подправить именно regex-шаблон?
5. olegzk - 11 Ноября, 2017 - 16:34:05 - перейти к сообщению
[quote=Строитель]olegzk, честно говоря такого варианта использования семейства функций preg_ я не встречал:

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

(Добавление)
А ещё правильнее было так
PHP:
скопировать код в буфер обмена
  1. preg_match_all('#(?:вася|петя).+#ui', $a, $res);
7. olegzk - 11 Ноября, 2017 - 16:47:58 - перейти к сообщению
Строитель пишет:
olegzk вместо двух функций можно же просто добавить "ИЛИ" внутрь шаблона:

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


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

И прошу прощения, ввел в заблуждение, насчет того, что на другом сайте работает без break. Там он тоже есть. Но почему ИЛИ не работает в шаблоне, так и непонятно.
8. Строитель - 11 Ноября, 2017 - 18:28:41 - перейти к сообщению
olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a
9. olegzk - 11 Ноября, 2017 - 19:18:25 - перейти к сообщению
Строитель пишет:
olegzk, чтоб наверняка понять, надо смотреть строку, которую вы обрабатываете регуляркой, т.е. содержимое переменной $a


$xmlfi=simplexml_load_file('http://....ru/rss/v2.xml')
foreach($xmlfi->channel->item as $item){
$a=$item->title;
10. Строитель - 11 Ноября, 2017 - 19:38:44 - перейти к сообщению
olegzk и что я по этому адресу, по вашему, смогу увидеть: httр://....ru/rss/v2.xml ? Радость
Не хотите ссылку светить, так соберите данные во временный массив, а после выхода из цикла - распечатайте его в браузере, и тогда будет видно, есть ли там то, что вы ищете регуляркой, или нет.
Спойлер (Отобразить)
11. olegzk - 11 Ноября, 2017 - 19:44:07 - перейти к сообщению
Ссылка любая может быть.
http://tass[dot]ru/rss/v2[dot]xml или https://www[dot]gazeta[dot]ru/export/rss/lenta[dot]xml

 

Powered by ExBB FM 1.0 RC1