Skip to content
irbis-team.com
irbis-team.com

  • Главная
  • Курсы
    • Регулярные выражения
    • Вводный курс
    • Гостевая книга
  • Для бывалых
    • Школа программирования
    • Введение в ООП
  • Скрипты
    • BB-code
    • Почтовый класс
irbis-team.com

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

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

Шаг 1.
Знакомство
Шаг 3.
Модификаторы и метасимволы
Шаг 2.
Как это устроено
Шаг 4.
Сложные конструкции

Шаг 1

Знакомство

Мы уже сталкивались с регулярными выражениями, когда (если) делали систему регистрации. Настало время копнуть поглубже.

Итак, что это такое.
Регулярные выражения (regex или regular expressions) представляют собой мощный и очень гибкий мини-язык, созданный для поиска подстрок в строке по заданным параметрам. Они являются неотъемлемой частью большинства основных языков программирования (PHP, Perl, JavaScript, Python, Ruby).
В этом разделе мы будем рассматривать только один из этих языков, это PHP.

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

Попробуем.

И так, что они могут, эти регэкспы.
• Проверять, соответствует ли вся строка целиком заданным параметрам.
• Находить в строке подстроки, которые удовлетворяют заданные параметры.
• Получить из строки подстроки, соответствующие заданным параметрам.
• Изменять в строке подстроки, соответствующие параметрам.
• И еще кучу всего интересного.

Нужно сразу определиться с терминологией, которая используется при работе.

1. Строка – весь набор символов, переданный для разбора.
2. Подстрока – это символ или определенная последовательность символов, или часть строки.
3. Заданные параметры – то есть то, что нам надо найти, где искать, на что заменить и т. д.
4. Дальше будут попадаться и другие, по ходу движения все объясним.

Ну а теперь вкусное – пример.

Возьмем самый простой вариант, который часто применяется для валидации логинов.

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32<?php

    function checkData($str)
    {
 
        $standart = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
                          'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
                          'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л',
                          'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'щ',
                          'ъ', 'ы', 'ь', 'э', 'ю', 'я', '0', '1', '2', '3', '4', '5', '6',
                          '7', '8', '9'
                          );
                  
                  
    mb_internal_encoding('utf-8');      
    $str = mb_strtolower($str);  
    $cnt = mb_strlen($str);   
  
    for($i = 0; $i < $cnt ; $i++)  
       if(!in_array(mb_substr($str, $i, 1), $standart))
           return false; 
           
    return true;
    }
    
   $login = 'עִבְרִית';
    
    if(checkData($login))
        echo 'Пойдет';    
    else
        echo 'Лазутчики!';

Мало того, что она громоздкая и запутаная, так еще и заставляет PHP решать несвойственные ему задачи. Делать посимвольный анализ на нем можно только в крайних случаях.
А с помощью регулярных выражений эта задача решается коротенькой строчкой:

1 2 3 4 5 6 7 8 9<?php

   $login = 'Дормидонт';
    
    if(!preg_match('#^[a-zа-яё0-9]+$#ui', $login))
        echo 'Лазутчики!';     
    else
        echo 'Пойдет';

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

Такой символ (^ – циркумфлекс или крышка) означает, что проверка будет от начала строки, ($ – доллар) означает конец строки. Если не ставить привязки к началу и концу строки, то регулярное выражение будет применимо к любой подстроке, и вот такой логин логинְרִית будет признан кошерным. ))

Так же границы регулярного выражения – должны как-то выделяться. В данном случае они выделены “шарпом”, символом решетки, т.е. #. Во многих учебниках границы задаются слэшами /. Это то же верно, но если, вдруг, в регулярном выражении необходимо будет использовать слэши, то их придется экранировать. И по этому рекомендуется использовать максимально нейтральные границы, такие как # ну или &. Но мы будет использовать #, потому что она выглядит красивее.

©2025 irbis-team.com | WordPress Theme by SuperbThemes