Регулярные выражения
Шаг 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 |
Мало того, что она громоздкая и запутаная, так еще и заставляет PHP решать несвойственные ему задачи. Делать посимвольный анализ на нем можно только в крайних случаях.
А с помощью регулярных выражений эта задача решается коротенькой строчкой:
1 2 3 4 5 6 7 8 9 | <?php |
Разберём регулярное выражение.
Взглядом незнакомого с регулярками человека эта мешанина всяких символов может показаться устрашающей, но если всё разобрать, то получается до боли просто.
Такой символ (^ – циркумфлекс или крышка) означает, что проверка будет от начала строки, ($ – доллар) означает конец строки. Если не ставить привязки к началу и концу строки, то регулярное выражение будет применимо к любой подстроке, и вот такой логин логинְרִית будет признан кошерным. ))
Так же границы регулярного выражения – должны как-то выделяться. В данном случае они выделены “шарпом”, символом решетки, т.е. #. Во многих учебниках границы задаются слэшами /. Это то же верно, но если, вдруг, в регулярном выражении необходимо будет использовать слэши, то их придется экранировать. И по этому рекомендуется использовать максимально нейтральные границы, такие как # ну или &. Но мы будет использовать #, потому что она выглядит красивее.