Примеры регулярных выражений в 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\"
)
SoftMaker.kz
SoftMaker.kz
SoftMaker.kz