|
Веб-курсы Что это? Оглавление Основы Основы основ Практика Гостевая книга Простой сайт Структура сайта (MVC) Ядро (Light) Ядро Гостевая на SQL Статические страницы Модуль новостей Система регистрации Теория Дебаггинг Регулярные выражения Введение в ООП Паттерны проектирования Репозитарий BB-code Почтовый класс Пагинатор Всякие полезности Download Полезные утилиты Разное Видеокурсы Последние изменения Вопросы и замечания сюда Реклама Диеты для похудения Фреймворк Kohana. Обучение. Мануал на русском. mp3 плееры transcend Отзывы пароварки скачать бесплатно оперу. |
Шаг 1Знакомство Мы уже сталкивались с регулярными выражениями, когда (если) делали систему регистрации. Настало время копнуть поглубже. Итак, что это такое. Регулярные выражения (regex или regular expressions) представляют собой мощный и очень гибкий мини-язык, созданный для поиска подстрок в строке по заданным параметрам. Они являются неотъемлемой частью большинства основных языков программирования (PHP, Perl, JavaScript, Python, Ruby). В этом разделе мы будем рассматривать только один из этих языков, это PHP. Регулярки, это поистине сказочное явление, результат работы которых просто повергает в шок. Часто можно услышать такое - я с регулярками не дружу. Это примерно тоже самое, что валить лес ножовкой и говорить - я с бензопилой не дружу. На самом деле это совсем не сложно, главное понять принцип и выучить немногословный синтаксис. Попробуем. И так, что они могут, эти регэкспы. • Проверять, соответствует ли вся строка целиком заданным параметрам. • Находить в строке подстроки, которые удовлетворяют заданные параметры. • Получить из строки подстроки, соответствующие заданным параметрам. • Изменять в строке подстроки, соответствующие параметрам. • И еще кучу всего интересного. Нужно сразу определиться с терминологией, которая используется при работе. 1. Строка - весь набор символов, переданный для разбора. 2. Подстрока – это символ или определенная последовательность символов, или часть строки. 3. Заданные параметры - то есть то, что нам надо найти, где искать, на что заменить и т. д. 4. Дальше будут попадаться и другие, по ходу движения все объясним. Ну а теперь вкусное - пример. Возьмем самый простой вариант, который часто применяется для валидации логинов. Допустим из эстетических соображений нам нежелательно в логин допускать никакие символы, кроме кирилицы, латиницы и цифр. Если разбирать строку в массив и проверять принадлежность каждого символа к эталонному, то выйдет огромная функция:
Мало того, что она громоздкая и запутаная, так еще и заставляет PHP решать несвойственные ему задачи. Делать посимвольный анализ на нем можно только в крайних случаях. А с помощью регулярных выражений эта задача решается коротенькой строчкой:
Разберём регулярное выражение. Взглядом незнакомого с регулярками человека эта мешанина всяких символов может показаться устрашающей, но если всё разобрать, то получается до боли просто. Такой символ (^ - циркумфлекс или крышка) означает, что проверка будет от начала строки, ($ - доллар) означает конец строки. Если не ставить привязки к началу и концу строки, то регулярное выражение будет применимо к любой подстроке, и вот такой логин логинְרִית будет признан кошерным. )) Так же границы регулярного выражения - должны как-то выделяться. В данном случае они выделены "шарпом", символом решетки, т.е. #. Во многих учебниках границы задаются слэшами /. Это то же верно, но если, вдруг, в регулярном выражении необходимо будет использовать слэши, то их придется экранировать. И по этому рекомендуется использовать максимально нейтральные границы, такие как # ну или &. Но мы будет использовать #, потому что она выглядит красивее. Меду этими символами идет так называемый паттерн. То есть шаблон, на который будет ориентироваться программа, осуществляя поиск совподений. В нашем случае это диапазоны символов от a до z (латинский алфавит) , от a до я плюс ё (кирилица) и от 0 до 9 (цифры). То, что это помещено в квадратные скобки, и обозначает диапазон. Или класс. Обратите особое внимание на то, что буква ё не входит в диапазон а - я, так уж исторически сложилось. По этому нужно подставлять её отдельно. Дальше идет плюсик. Это количество символов в подстроке. Если стоит плюс, то значит, что хотя бы один символ из указанного диапазона в строке быть обязан. Если звездочка - то может и не быть такого. Если цифра в фигурных скобках - значит именно такое количество символов должно идти подряд. Если диапазон, то от и до соответственно. Буква u после границы шаблона(модификатор) означает, что мы будем работать с символами в кодировке (UTF-8), а i значит, что регистр символов не имеет значения, то – есть в верхнем, или в нижнем, или вперемешку будут символы, не важно. Есть еще куча модификаторов, которые помогают управлять процессом. Если прервести это регулярное выражение на обывательский язык, то получится примерно так: Проверяемая строка должна состоять хотя бы из одного символа латиницы или кирилицы или цифры. Другие символы не приемлимы. Заглавная или прописная - не важно. Вот так вот примерно работают регулярки. Подробнее в следующих разделах. Артем aka Winston |