Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2018, 12:41   #1
Kulikden1985
Новичок
Джуниор
 
Регистрация: 01.09.2018
Сообщений: 2
По умолчанию Не работает регулярное выражение, если параметры поиска выводить в переменных (с переходом строки \n\r)

Уже третий день не могу решить один момент с парсером.
1) Раньше для парсинга я просто вставлял куски кода в файлике, ну например:

$page=file_get_contents($link);
preg_match_all('# href="(.+?)">#su', $page, $pagin);//Выкачивание анкора ссылки

Затем решил эти значения ("href=") и (">) загнать в переменные для удобства, ну к примеру чтобы их хранить в таблице sql.

2) $page=file_get_contents($link);
$param_1=' href="';
$param_2='">';
preg_match_all('#'.$param_1.'(.+?)' .$param_2.'#su', $page, $pagin);//Название товара

Второй вариант работает, но только не в случае, если какая-нибудь из переменных имеет переход строки, типо такого:
$param_1='
<span>
<a href="';

Помогите плиз...
Kulikden1985 вне форума Ответить с цитированием
Старый 01.09.2018, 12:47   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Используйте HTML парсер для парсинга HTML, а не регекспы.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.09.2018, 12:50   #3
Kulikden1985
Новичок
Джуниор
 
Регистрация: 01.09.2018
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Используйте HTML парсер для парсинга HTML, а не регекспы.
Прошу прощения, а можно по яснее, не вкурил про регеспы))) Ну вы шустро отвечаете, я думал ответ через пару дней получу))
Kulikden1985 вне форума Ответить с цитированием
Старый 01.09.2018, 13:25   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

регексп это regular expression.

Как правило их дико неудобно и ненадежно использовать для парсинга HTML.
Лучше взять библиотеку для парсинга HTML (там обычно CSS селекторы или XPath).

https://www.google.com/search?q=php+html+parser —> https://stackoverflow.com/questions/...tml-xml-in-php
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.09.2018, 13:32   #5
Ottava
Форумчанин
 
Регистрация: 05.09.2017
Сообщений: 157
По умолчанию

Kulikden1985, похоже ваша регулярка (.+?) не ловит переносы строк \r\n, даже не смотря на ключ /s. Попробуйте указать их явно как [\r\n]* там где они могут встретиться:

Код:
[\r\n]*(.+?)[\r\n]*
или так, но тогда \r\n захватятся регуляркой и попадут в результат:
Код:
([.\r\n]+?)

PS: Строки с \r\n при инициации должны быть в двойных кавычках ", ибо в одинарных ' PHP не заменяет \r\n их на коды символов.
Безопасность с Content Security Policy

Последний раз редактировалось Ottava; 01.09.2018 в 13:42.
Ottava вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Preg_match Проверка группы переменных на регулярное выражение Женя32 PHP 3 28.01.2017 08:58
Не совсем корректно работает регулярное выражение artur4ek94 PHP 3 30.10.2016 14:27
Регулярное выражение. Элементы строки в массив. Stilet JavaScript, Ajax 7 04.11.2015 09:47
XE2. Не работает регулярное выражение из коробки Человек_Борща Общие вопросы Delphi 0 09.02.2014 14:38
Регулярное выражение kpachbiu PHP 2 08.02.2011 21:36