Регулярные выражения 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";
}
?>
[IMG=http://cdn.guru99.com/images/2013/04/preg_match.png]
Рассмотрим ту часть кода, которая отвечает за вывод "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 );
?>
[IMG=http://cdn.guru99.com/images/2013/04/preg_split.png]

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;
?>
[IMG=http://cdn.guru99.com/images/2013/04/preg_replace.png]

Метасимволы
В приведенных выше примерах использовались простые шаблоны. Метасимволы позволяют выполнять более сложные сопоставления шаблонов 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.
[IMG=http://cdn.guru99.com/images/2013/04/validate_email.png]
Метасимволы являются полезными, когда речь идет о сопоставлении на соответствие шаблонам.

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

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

Источник