PHP

Подскажите плз ламеру по regexr

Подскажите ламеру плз:
Чем отличаются
|.*?|is от |(.*?)|is
|.*?|is от |.*?|i
Когда необходимо использовать .*? а когда (.*?)

Сори мейл режет. Вот код: https://pastebin.com/whvuuiA0
Использовать | в качестве ограничителя - очень плохая идея: | - это служебный символ, используемый для разделения вариантов в регулярном выражении.

Модификатор s используется для поиска участка текста, который может занимать несколько строк. Без s поиск производится отдельно в каждой строке текста (разделитель строк - символ "\n"), а при использовании s символ "\n" рассматривается как один из пробельных символов, входящих в набор \s.

В твоём случае содержимое div может занимать несколько строк и потому s ставить необходимо.

Круглые скобки выделяют в найденном тексте отдельные участки - для дальнейшего их использования.

Для '|.*?|is' preg_match запишет в третий параметр массив из одного элемента (весь найденный текст), а в preg_replace во втором параметре доступна только подстановка $0.

Для '|(.*?)|is' preg_match запишет в третий параметр массив из двух элементов (весь найденный текст и только то, что найдено выражением в круглых скобках), а в preg_replace доступны подстановки $0 и $1.

Если тебе нужно получить всё найденное, включая теги div и /div, круглые скобки не нужны. Но если тебе надо отдельно получить содержимое тега div - то для этого круглые скобки и нужны.

Кроме того, круглые скобки используют для перечисления вариантов: например, #дом (|а|у|е|ом) # найдёт все падежи слова "дом" (пробел между 'м' и '(' - самодеятельность слишком "умного" парсера "ответов").

P.S. Хочешь разобраться в регулярках - читай документацию: https://www.php.net/manual/ru/book.pcre.php
M0
Mukhan 0
73 896
Лучший ответ
Александр Мещеряков данные выражения используются в шаблонах дополнительных обработок (удаление лишнего или замена на свой вариант) парсера страниц сайтов.
Плохая идея или хорошая, но так сделано автором плагина. Между прямыми слешами регулярное, а после них, если я правильно понимаю условие.
Константин Собко А по regexp'ам есть какой-то стандарт, или каждый чо хочет, то и ворочет? =)
Скобки предназначены для замены. Если тебе просто найти куски текста, подходящие под регэкс, они ничего не делают.
s обрабатывает переносы строки как обычные символы.
() это группа захвата
вы потом сможете узнать что попало в неё в регекспе.
Например, /abc([A-z]*?)def/. Под это выраж-е попадёт abcooodef, а в 1 группе захвата будет ooo.

Нужно использовать тогда, когда вам нужно узнать что находится внутри какой-то области.
Александр Мещеряков В принципе мне надо получить то, что находится между указанными тегами. И потом это заменить на свое.