Главная > php > Php получить текст между тегами

Php получить текст между тегами

 

Используемые модификаторы шаблона (символы после закрывающего разделителя # в конце шаблона):
i (PCRE_CASELESS) – Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра. Т.е. будет осуществляться регистро-независимый поиск.
И в нашем примере будет найден и текст между тегами

<DIV CLASS="CONTENT">...</DIV>

s (PCRE_DOTALL) – Если данный модификатор используется, метасимвол “точка” в шаблоне соответствует всем символам, включая перевод строк. Без него – всем, за исключением переводов строк
Итак,
. (точка) – любой символ (в том числе и перенос строки, поскольку используется модификатор s)
+ – означает повтор один и более раз.
Т.е. .+ – любой символ повторяется один или более раз. Данная конструкция попытается найти и захватить максимальное число любых символов, т.е. до последнего закрывающего </div>, согласно нашего шаблона. Но, данная ситуация нас не устроит, поскольку на странице будут еще блоки с закрывающимся тегом </div>, содержимое которых нам не нужно. Данная проблема решается с помощью квантификатора ? – знак вопроса.
? – убирает “жадность” квантификатора, стоящего перед ним.
Т.е. .+?</div> найдет любые символы до первого </div>, без знака вопроса эта конструкция искала бы до последнего </div>.
А с помощью скобок () мы указываем подмаску нашего шаблона. После выполнения поиска по заданному шаблону, arr[0] будет содержать массив полных вхождений шаблона, а элемент arr[1] – массив строк, содержащихся между данными тегами, т.е. тот самый текст, который нам нужно было получить.



  1. Олежка
    01 Сен 2017 из 12:43 | #1

    Я хотел бы несколько дополнить сказанное.
    Да на выходе мы получаем массив $arr[1], однако же для удобства дальнейшей работы я предлагаю этот массивчик преобразовать в одну строку, например так:

    $my_str = implode(”, $arr[1]);

    Это не всегда, конечно полезно, но…

    В моем случае я вырезал текст с html кодом из определенного тега с определенным Id (типа …некий html…), и вставлял сразу целой строкой в другое нужное мне место.

    Повторюсь, задача была специфической, но может кому пригодится…

  2. 20 Апр 2014 из 19:31 | #2

    Отлично!) Спасибо, с шаблонами у меня чет туго )) давно искал как задать любой символ )) вот эта штука (.+?) по видимому то что я искал СПС еще раз!

  3. 28 Мар 2014 из 14:52 | #3

    Спасибо за пример, когда то очень долго провозился с таким вопросом.

  4. 03 Ноя 2013 из 22:15 | #4

    В данном случае не надо: регулярное выражение обрамлено диезами, а не слешами.

  5. Oleg
    03 Ноя 2013 из 21:12 | #5

    В регэкспе надо экранировать прямой слеш

  1. Трекбеков пока нет.