Примеры регулярных выражений в PHP
Здравствуйте, ребята! Этот пост постоянно обновляется. Со временем я вношу сюда новые регулярные выражения и стараюсь сначала проверить их на практике, а потом делюсь с вами. Если вы найдете полезным эти примеры, то не стесняйтесь об этом писать в комментариях. Также было бы здорово, если вы сможете оставлять свои примеры, чтобы и другие наши коллеги могли воспользоваться ими в своей работе. Буду рад, если вы поможете в этом другим. В конце статьи я советую вам обратить внимание на бесплатную плюшку. А сейчас перейдем к делу!
Содержание
- Как из строки получить подстроку, находящуюся внутри скобок?
- Как в строке заменить подстроку, находящуюся внутри скобок, захватив при этом окончание, стоящее сразу после закрывающей скобки?
- Как c помощью регулярного выражения PHP получить значение переменной из url?
- Как вырезать текст внутри тэга?
- Извлечение, вырезка тэга img из текста вместе с атрибутами
- Извлечение, вырезка aтрибута src тэга img из текста
Как из строки получить подстроку, находящуюся внутри скобок?
Например, имеем строку вида:
<?php $phrase = '{preg_match} - выполняет подстановку регулярного выражения.'; preg_match("/{([^}]+)}*/i", $phrase, $found); print_r($found); ?>
Мы использовали функцию preg_match для решения данной задачи.
Получим следующий результат:
Array ) [0] => {preg_match} [1] => preg_match )
Наша подстрока находится во втором элементе массива $found. Кроме того, можно настроить регулярное выражение на работу, например, с разными видами скобок. Если нужно получить подстроку в квадратных скобках, изменим регулярное выражение следующим образом:
<?php $phrase = '[preg_match] - выполняет подстановку регулярного выражения.'; preg_match("/[ # открывающая квадратная скобка ([ ^] # взять с начала строки до скобки ]+) ] # закрывающая квадратная скобка */i", $phrase, $found); print_r($found); ?>
Мы изменили регулярное выражение в трёх местах. Получим тот же результат, что и в первом примере.
Как в строке заменить подстроку, находящуюся внутри скобок, захватив при этом окончание, стоящее сразу после закрывающей скобки?
Будем использовать функцию preg_replace для решения данной задачи.
<?php $str = "Ищет в {sub}ject совпадения."; $phrase = preg_replace('/{ # открывающая фигурная скобка (.*) # взять любые символы внутри скобок } # закрывающая фигурная скобка ([^s]*) # взять все символы после закрывающей # фигурной скобки кроме пробела /', '$1$2', $str); echo $phrase; ?>
Как видите, то, что нужно взять из фигурных скобок и вне их, выделено круглыми скобками. У нас есть два условия, первое в первых круглых скобках, второе — во вторых. Внутри функции, которая будет выполнять операцию со строкой
при помощи вышеприведенных условий, совпадение будет запоминаться в специальных переменных, поэтому к этим переменным можно обращаться через $1 и $2. Во втором аргументе функции preg_replace указаны эти две переменные. В результате мы получим:
Ищет в <em>subject</em> совпадения.
Как c помощью регулярного выражения PHP получить значение переменной из url?
Используем функцию preg_match для решения данной задачи.
<?php $url = 'http://www.softmaker.kz.php?cat=2&id=2'; // получим значение переменной $cat preg_match("/ ? (?:.*&)* cat= ([^&]+) /i", $url, $found); echo $found[1]; // получим значение переменной $id preg_match("/ ? (?:.*&)* id= ([^&]+) /i", $url, $found); echo $found[1]; ?>
Значение переменной находится во втором элементе массива $found. Также для решения данной задачи можно использовать две функции php parse_url и parse_str.
<?php $arr=parse_url('http://www.softmaker.kz.php?cat=2&id=101'); parse_str($arr['query'], $arr2); print_r($arr2); ?>
Получим следующий результат:
Array ) [cat] => 2 [id ] => 101 )
Как вырезать текст внутри тэга?
У нас есть текст внутри тэга:
<head>
…
текст с форматированием
…
</head>
Нужно получить:
…
текст с форматированием
…
Используем функцию preg_match:
<?php $matches = null; $firstStr = '<head> ... текст с форматированием ... </head>'; $returnVal = preg_match('/<head>(.*)<\/head>/s', $firstStr, $matches); print_r($matches); ?>
Получим результат:
Array ) [0] => '<head> ... текст с форматированием ... </head>' [1] => '... текст с форматированием ...' )
Понятно, что мы можем заменить тэг head, например на тэг p, чтобы искать текст в нём.
Извлечение, вырезка тэга img из текста вместе с атрибутами
Используем функцию preg_match_all:
<?php // Вырезает из текста все теги img //вместе со всеми атрибутами alt, title и т.д. $text = $myrow[text]; preg_match_all('/<img[^>]+>/i', stripslashes($text), $matches); $bodytag = $matches[0]; echo "<pre>"; print_r($bodytag[0]); echo "</pre>"; ?>
Получим результат:
Array ( [0] => <img src="https://site.softmaker.kz/Forma-zadolzhennost-pered-postavshhikami-i-pokupatelyami.png" width="508" height="354" title="Внешний вид отчета 1С «Задолженность перед ...»" alt="Отчет 1С для конфигурации 1С Бухгалтерия 8.2. «Задолженность перед поставщиками и покупателями»"/> [1] => <img src="https://site.softmaker.kz/VyborPerioda-nastrojka-otchyota.png" width="431" height="253" title="Диалог «Настройка отчёта» для выбора значения периода" alt="Настройка отчета «Задолженность ..."/> [2] => <img src="https://site.softmaker.kz/OtborKontragenta-nastrojka-otchyota.png" width="557" height="231" title="Диалог «Настройка отчёта» для выбора значения ..." alt="Настройка отчета «Задолженность ..."/> [3] => <img src="https://site.softmaker.kz/OtborGruppyKontragentov-nastrojka-otchyota.png" width="512" height="231" title="Диалог «Настройка отчёта» для выбора ..." alt="Настройка отчета «Задолженность перед поставщиками ..."/> )
Извлечение, вырезка aтрибута src тэга img из текста
Используем функцию preg_match_all:
<?php $matches = null; // Вырезает из текста только src, т.е. только ссылку на изображение preg_match_all('/<img[^>]+src=([\'"])?((?(1).+?|[^\s>]+))(?(1)\1)/', $myrow[text], $matches); echo "<pre>"; print_r($matches[2]); echo "</pre>"; ?>
Получим такой результат:
Array ( [0] => \"https://site.softmaker.kz/Forma-zadolzhennost-pered-postavshhikami-i-pokupatelyami.png\" [1] => \"https://site.softmaker.kz/VyborPerioda-nastrojka-otchyota.png\" [2] => \"https://site.softmaker.kz/OtborKontragenta-nastrojka-otchyota.png\" [3] => \"https://site.softmaker.kz/OtborGruppyKontragentov-nastrojka-otchyota.png\" )