Регулярные выражения PHP

Что такое регулярные выражения?

PHP regexp - это мощный алгоритм сопоставления шаблонов, которое может быть выполнено в одном выражении. Регулярные выражения PHP используют арифметические операторы (такие как +, -, ^) для создания сложных выражений.

Для чего используются регулярные выражения:

  • Регулярные выражения упрощают идентификацию строковых данных путем вызова одной функции. Это экономит время при составлении кода;
  • При проверке введенных пользователем данных, таких как адрес электронной почты, домен сайта, номер телефона, IP-адрес;
  • Выделение ключевых слов в результатах поиска;
  • Регулярные выражения могут использоваться для идентификации тегов и их замены.

Регулярные выражения в PHP

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

  • preg_match - используется для выполнения сопоставления с шаблоном строки. Она возвращает true, если совпадение найдено, и false, если совпадение не найдено;
  • preg_split - используется для разбивки строки по шаблону, результат возвращается в виде числового массива;
  • preg_replace – используется для поиска по шаблону и замены на указанную строку.

Ниже приведен синтаксис функций регулярных выражений, таких как preg_match, preg_split или PHP regexp replace:

<?php
имя_функции('/шаблон/',объект);
?>

, где

"имя_функции" - это либо preg_match, либо preg_split, либо preg_replace.
"/.../" - косые черты обозначают начало и конец регулярного выражения.
"'/шаблон/'" - шаблон, который нам нужно сопоставить.
"объект" - строка, с которой нужно сопоставлять шаблон.

Теперь рассмотрим практические примеры использования упомянутых выше функций.

Preg_match

В первом примере функция preg_match используется для выполнения простого сопоставления шаблоном для слова guru в заданном URL-адресе.

В приведенном ниже коде показан вариант реализации данного примера:

<?php
$my_url = "www.guru99.com";
if (preg_match("/guru/", $my_url))
{
echo "the url $my_url contains guru";
}
else
{
echo "the url $my_url does not contain guru";
}
?>
preg_match

Рассмотрим ту часть кода, которая отвечает за вывод "preg_match ('/ guru /', $ my_url)".

Здесь:

"preg_match(...)" - функция PHP match regexp.
"'/Guru/'" - шаблон регулярного выражения.
"$My_url" - переменная, содержащая текст, с которым нужно сопоставить шаблон.

Preg_split

Рассмотрим другой пример, в котором используется функция preg_split.

Мы возьмем фразу и разобьем ее на массив; шаблон предназначен для поиска единичного пробела:

<?php
$my_text="I Love Regular Expressions";
$my_array  = preg_split("/ /", $my_text);
print_r($my_array );
?>
preg_split

Preg_replace

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

Приведенный ниже код ищет в строке слово guru. Он заменяет его кодом css, который задает цвет фона:

<?php
$text = "We at Guru99 strive to make quality education affordable to the masses. Guru99.com";
$text = preg_replace("/Guru/", '<span style="background:yellow">Guru</span>', $text);
echo $text;
?>
preg_replace

Метасимволы

В приведенных выше примерах использовались простые шаблоны. Метасимволы позволяют выполнять более сложные сопоставления шаблонов PHP regexp, такие как проверка адреса электронной почты. Рассмотрим часто используемые метасимволы.

МетасимволОписаниеПример
.Обозначает любой единичный символ, кроме символа новой строки././ - все, что содержит один символ.
^Обозначает начало строки, не включая символ /./^PH/ - любая строка, которая начинается с PH.
$Обозначает шаблон в конце строки./com$/ - guru99.com,yahoo.com и т.д.
*Обозначает любое количество символов, ноль или больше./com*/ - computer, communication и т.д.
+Требуется вхождение перед метасимволом символа (ов) хотя бы один раз./yah+oo/ - yahoo.
\Символ экранирования./yahoo+\.com/ - воспринимает точку, как дословное значение.
[...]Класс символов./[abc]/ - abc.
a-zОбозначает строчные буквы./a-z/ - cool, happy и т.д.
A-ZОбозначает заглавные буквы./A-Z/ - WHAT, HOW, WHY и т.д.
0-9Обозначает любые цифры от 0 до 9./0-4/ - 0,1,2,3,4.

Теперь рассмотрим сложный PHP regexp пример, в котором проверяется валидность адреса электронной почты:

<?php
$my_email = "name @ company . com"
if (preg_match("/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+.[a-zA-Z.]{2,5}$/", $my_email)) {
echo "$my_email is a valid email address";
}
else
{
  echo "$my_email is NOT a valid email address";
}
?>

Результат: адрес электронной почты name@company.com является валидным.

Пояснение шаблона "[/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/] "

"'/.../'" начинает и завершает регулярное выражение.
"^[a-zA-Z0-9._-]" соответствует любым буквам в нижнем или верхнем регистре, цифрам от 0 до 9 и точкам, подчеркиваниям или тире.
"+@[a-zA-Z0-9-]" соответствует символу @, за которым следуют буквы в нижнем или верхнем регистре, цифры от 0 до 9 или дефисы.
"+\.[a-zA-Z.]{2,5}$/" указывает точку, используя обратную косую черту, затем должны следовать любые буквы в нижнем или верхнем регистре, количество символов в конце строки должно быть от 2 до 5.

validate_email

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

Заключение

  • PHP regexp - это алгоритм поиска по шаблону;
  • Регулярные выражения полезны при выполнении проверок валидности, создании HTML-шаблонов, которые распознают теги и т. д.;
  • PHP имеет встроенные функции для работы с регулярными выражениями: preg_match, preg_split и preg_replace;
  • Метасимволы позволяют создавать сложные шаблоны.

Перевод статьи «PHP Regular Expressions» дружной командой проекта Сайтостроение от А до Я.

17 апреля 2017 в 12:35
Материалы по теме
{"url":"http://www.fastvps.ru/", "src":"/images/advbanners/fastvps.png", "alt":"Хостинг Fastvps.ru. Наш выбор!"}
Заработок