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

Понятие регулярного выражения

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

Область использования регулярных выражений в PHP достаточно широка. К примеру следующий код проверяет правильность ввода email адреса:

/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,3}$/

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

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

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

Вы наверное замечали, что на многих сайтах email адрес указан без символа @. Связанно это с тем, что сейчас по просторам сети internet разгуливает множество роботов – пауков, в алгоритмах которых используются регулярные выражения, позволяющие роботам находить email адреса, форумы и гостевые книги, чтобы потом поместить их в специализированные базы, которые широко популярны в SEO среде.

Основные функции для работы с регулярными выражениями:

preg_match(pattern, string, [result, flags]) где:

 

pattern – шаблон регулярного выражения;

string – строка, в которой производится поиск;

result – содержит массив результатов (нулевой элемент массива содержит соответствие всему шаблону, первый – первому «захваченному» подшаблону и т.д.);

flags – необязательный параметр, определяющий то, как упорядочены результаты поиска.

Эти функции осуществляют поиск по шаблону и возвращают информацию о том, сколько раз произошло совпадение. Для preg_match() это 0 (нет совпадений) или 1, поскольку поиск прекращается, как только найдено первое совпадение. Функция preg_match_all() производит поиск до конца строки и поэтому находит все совпадения. Все точные совпадения содержатся в первом элементе массива result у каждой из этих функций (для preg_match_all() этот элемент – тоже массив).

Ниже вы можете видеть, как работает поиск по шаблону:

<?
$str = «Номер участкового: «.»33 – 22 – 44. Номер юриста: «.»222 – 44 – 55 или 323 – 22 – 33»;
$pattern = «/\d{3} – \d{2} – \d{2}/m»;
$matches = preg_match_all ($pattern,$str, $result);
for ($i=0;$i<$matches;$i++)
echo «Совпадение $i: «.$result[0][$i].»<br>»;
?>
 

Совпадение 0: 222-44-55
Совпадение 1: 323-22-33

 

В данном примере мы используем поиск по шаблону всех семизначных номеров. Для начала мы создаем текстовую строку, содержащую три телефонных номера, только два из которых соответствуют нашему условию. Шаблон для поиска 7-ми значного номера выглядит следующим образом: /\d{3} – \d{2} – \d{2}/m.

 

Далее мы производим поиск по шаблону:

$matches = preg_match_all ($pattern,$str, $result);

И выводим содержимое массива $result на экран:

for ($i=0;$i<$matches;$i++)

echo «Совпадение $i: «.$result[0][$i].»<br>»

Подробнее о синтаксисе РВ

   Отправить статью как PDF