Как сделать сайтУроки PHP - Регулярные выражения на php

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

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

Регулярные выражения и модификаторы

С помощью регулярных выражений можно представить любую часть текста. Их используют, когда понадобится из текста выявить все слова заданной длины или содержащие заданную маску. Эта маска может содержать буквы, цифры, спецсимволы... Начинается и заканчивается регулярное выражение со знаков слэш "/". После закрывающего знака могут находиться модицикаторы.

Модификаторы регулярных выражений

/i - делает поиск по выражению регистронезависимым. Это означает, что в результат поиска попадут отрывки текста содержащие и заглавные и прописные символы;
/U - модификатор указывает на то, что результатом поиска должен быть самый короткий отрывок, удовлетворяющий маске поиска. Рекомендую всегда использовать данный модификатор;
/m - этот модификатор позволяет искать отрезок текста только внутри одной строки;
/s - если необходимо, что бы поиск был по всему тексту, не обращая внимания на перенос строки;
/x - игнорируются пробельные символы, в том числе символы табуляции и перевода строки.

Примеры регулярных выражений

Получить все ссылки из текста
Предположим, что в исходном коде, в котором будет осуществляться поиск, ссылки имеют вид http://site-do.ru
preg_match_all("/http:\/\/([\w?\d?]+\-?\.?)+/", 
    "В нашем тексте встречается всего одна ссылка http://forum.site-do.ru и она должна быть найдена", 
    $return, PREG_PATTERN_ORDER);
print_r ($return);
//результат  Array ( [0] => Array ( [0] => http://forum.site-do.ru ) [1] => Array ( [0] => ru ) ) 
Результат выполнения связан со спецификой возвращаемых этой функцией данных. С этой спецификой вы ознакомитесь практикуясь самостоятельно, скажу только что для определения вида массива на выходе существует флаг PREG_PATTERN_ORDER и другие. Лучше разберем само выражение.
Мы написали http:\/\/, вместо http://, потому что слэш "/" в регулярных выражениях является спецсимволом, который необходимо экранировать. Далее идут круглые скобки, внутри которых находится вложенное выражение, а знак "+" после закрывающей скобки означает для основного выражения, что фрагмент текста, соответсвующий внутреннему выражению должен повторятья более одного раза. Внутри выражения мы видим знак вопроса "?", который означает, что символ, который перед ним идет может быть в отрывке текста один раз или не быть вообще. Мы понимаем, что домен представляет собой отрывки из букв, цифр, знаков дефис "-" и точек. Таким образом получаем фрагменты: "forum.", "site-", "do.", "ru". Наш пример так же может находить ссылки, содержащие цифры. За это отвечает спецсимвол \d. За поиск букв отвечает \w.
Проверить правильность email адреса
$email='sdsdED@ane.ru';
if (!preg_match("/^[\w\d_-]+@[\w\d-]+\.\w+$/i",$email)) {
        echo "Email введен неверно";
        }
В результате примера ничего не будет выведено на экран. Если же указать email в неправильном формате, то он не будет соответстовать регулярному выражению и на экране появися сообщение "Email введен неверно". Разберем выражение.
Значки ^ и $ обозначают начало и конец строки соответственно. В квадратных скобках перечислены символы, которые могут находиться в этом месте и будут расценены, как один символ. Но далее идет знак "+", который говорит о том, что этот символ может повторяться несколько раз. Потом идет собачка, потом то, что может быть основой домена. Мы не берем в расчет, что существуют домены третьего уровня, потому что почта на них встречается очень редко. В конце идет доменная зона, состоящая из нескольких букв.

Дополнить статью хочу информацией о спецсимволах регулярных выражений, которые не были затронуты.
Спецсимвол точка "." соответствует любому символу.
Фигурные скобки "{}" используют что бы обозначить количество необходимых символов. Например w{3} - три буквы w подряд. Можно указать диапозон z{2,5}, что обозначает повторение буквы z от двух до пяти раз.
Вертикальная черта | - логическое или в регулярных выражениях.
\n - перевод строки
\r - так же перевод строки
\t - табуляция
\d - цифра
\D - только не цифра
\s - пробел
\S - только не пробел
\w - все буквы, цифры и знак подчеркивания "_"
\W - только не буква, цифра или подчеркивание

Так же советую прочитать статью про массивы. Переходите на страницу php массивы и внимательно изучайте.


Скачайте бесплатно 10 видеоуроков PHP + MySQL одним архивом

Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.


Уроки PHP Код кнопки:


Теперь нажмите кнопку, что бы не забыть адрес и вернуться к нам снова.