preg_replace поиск текста до первого вхождения пустой строки

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

Рассмотрим вариант с текстом , в котором сверху идет служебная информация, а снизу , собственно, контент(тело) документа:

$data = "HTTP/1.1 200 OK
Date: Thu, 22 Jan 2015 23:56:03 GMT
Server: Apache/2.2.10 (Fedora)
Last-Modified: Mon, 31 Oct 2011 02:46:01 GMT
Content-Length: 3210
Connection: close
Content-Type: text/html
   
Hello world!";

Чтобы получить верхнюю техническую часть текста, нам и понадобится составить регулярное выражение срабатывающее на первой пустой строке:

preg_match('/\A.*?(?=\s*^\s*$)/sm', $data, $regM);

Разберем шаблон поиска preg_match:
1. Традиционно шаблон регулярного выражения начинается и заканчивается слешем / /
2. \A – символизирует собой начало строки
3. .*? – любой символ или число
4. (?= – открывает вложенный шаблон поиска пустого места
5. \s* – пустая линия которая нам как раз и нужна
6. ^\s* – определяет конец пустого места , теперь должен начаться следующий текст
7. $) – закрывает вложенный шаблон поиска пустой строки
8. /sm – конец самого выражения с модификаторами.
Модификаторы на конце строки /sm означают:
s – в нашем шаблоне, точка соответствует всем символам , в том числе символу перевода строки; без /s точка соответствовала бы всем символам , но не символу перехода \n
m – MULTILINE наша строка содержит, если можно так выразиться, несколько строк-переходов, она многоэтажная.

В результате работы скрипта получаем верхнюю часть текста:
echo $regM['0'];

Полный вариант данного PHP скрипта можно посмотреть здесь.

Опубликовано 23.01.2015 в 05:09 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: PHP программирование · Теги: , , , , , ,