От автора: тут недавно со знакомым филологом встретился в «непринужденной» обстановке. Так он заявил, что программные дисциплины не могут называться языками, поскольку не включают в себя выражения. Я ответил, что он не прав. Вот, например, есть PHP выражения. А если он еще раз зачерпнет чипсы из моего кулька, то будет послан с помощью регулярного выражения, позаимствованного из русского языка.
Выражаемся яснее
Выражения – основная структура языка программирования. Любая строка, которая заканчивается присвоением значения или любой элемент, который имеет значение, является выражением.
Все они отделяются друг от друга точкой с запятой («;»). Получается, что любая строка кода является выражением. Если между выражениями не поставить оператор разделитель, тогда интерпретатор вместо результата выполнения скрипта выведет сообщение об ошибке.
Кроме этого в программировании существуют не совсем обычные выражения – регулярные. Не является исключением из правил и изучаемая нами дисциплина. Но постигать PHP регулярные выражения лучше на примерах.
Страшная вещь!
Ох, как я намаялся с этими регулярками в годы своего студенчества. Но, как бы ни хотелось их обойти стороной, все равно без регулярных выражений не обойтись. Постараюсь доступнее объяснить их предназначение.
Регулярные выражения чаще всего используются для поиска и фильтрации данных. На их основе построена большая часть поисковых фильтров, реализованных на сайтах. Например, для выбора нужного товара в интернет-магазинах. А также всевозможные парсеры.
Также регулярки часто применяются в формах для валиадции вводимых пользователем данных, чтобы значения полей соответствовали определенным правилам.
С этим примером применения регулярных выражений вы точно сталкивались, когда заполняли какую-нибудь регистрационную форму на сайте. Чаще всего с их помощью устанавливается синтаксис написания пароля или адреса электронного почтового ящика. При несоблюдении правил выводится сообщение о нарушении синтаксиса или заполняемое поле окрашивается в красный цвет.
Но вернемся к применению регулярных выражений в PHP.
Практика
PHP не только поддерживает regular expressions, но и предоставляет множество инструментов для работы с ними. Самой простой в употреблении является функция ereg(), которая служит для поиска во входящей строке совпадений, заданного регулярным выражением.
1 2 3 4 5 6 7 8 |
<?php $a="В этой строке есть подстрока"; if(ereg("подстрока",$a)) { echo "Подстрока найдена"; } else echo "Подстрока не найдена"; ?> |
Но данная функция хоть и работает, но считается (начиная с версии PHP 5.3) устаревшей. Вместо нее лучше использовать preg_match().
1 2 3 4 5 6 7 8 |
<?php $a="В этой строке есть подстрока"; if(preg_match("/подстрока/",$a)) { echo "Подстрока найдена"; } else echo "Подстрока не найдена"; ?> |
Обратите внимание, как в этом примере использования регулярных выражений в PHP задан шаблон для поиска. В отличие от предыдущего варианта здесь мы экранировали строковое значение с помощью правого слеша. Это особенность синтаксиса построения regular expressions, которую стоит учитывать.
В предыдущем примере мы искали подстроку в нижнем регистре. Теперь немного изменим наш пример:
1 2 3 4 5 6 7 8 9 10 11 |
<?php $a="В этой строке есть php"; if(preg_match("/PHP/",$a)) { echo "Подстрока найдена"; } else { echo "Подстрока не найдена"; } ?> |
Как видите, на не удалось найти «PHP»! И все из-за разных регистров в шаблоне и первоначальной строке. Но это можно изменить с помощью специального модификатора i, который включает регистронезависимость при поиске.
Pегулярные выражения PHP – это объемная тема, погружение в которую мы продолжим при нашей следующей встрече. И главное, не позволяйте каким-либо филологам безнаказанно «тырить» чипсы из своей пачки. Наверное, их этому специально учат на филологических факультетах :).