![]() Если Вы видите здесь эту рекламу, значит увидят и Вашу рекламу... | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PHP: введение в регулярные выраженияDenveroid Регулярные выражения часто воспринимаются как что-то непонятное, даже мистическое, которые понять может только «гуру» в программировании. Они трудночитаемы, непонятны на первый взгляд для человека не знакомого с их синтаксисом, выглядят как строки, состоящие из случайного набора символов. В действительности же – регулярные выражения довольно просты и понятны при использовании таблиц-подсказчиков. Немного историиМатематик Стивен Клин впервые представил регулярные выражения в 1956, в результате его работы с рекурсивными наборами в естественном языке. Они были созданы как синтаксические наборы, использовавшиеся для нахождения соотвествий шаблонов в строках, которые позже помогали обращаться к появляющейся технологической информации, облегчая автоматизацию. С тех пор, регулярные выражения прошли через множество итераций, и текущий стандарт сохраняется ISO (Международной организацией по стандартизации) и определен Open Group, совместным усилием различных технических некоммерческих организаций. Регулярные выражения не представляют из себя отдельный язык, – это определенный стандарт для поиска и замены текста в пределах файла или любой строки. Поддерживаются два стандарта: основные регулярные выражения (BRE - basic regular expressions) и расширенные регулярные выражения (ERE - extended regular expressions). ERE включает все функциональные возможности BRE, плюс дополнительные концепции. Множество приложений используют регулярные выражения, включая xsh, egrep, sed, и vi, среди других на UNIX платформах, и они были приняты в той или иной форме большинством языков программирования. Также, как HTML и XML – оба являются производными от SGML, эти адаптации часто представляют собой производные от полного стандарта. С перемещением регулярных выражений в кросс-платформенные языки программирования, их мощь использовалась множествами способов, неочевидными на первый взгляд. Поисковые серверы Internet используют их; почтовые программы также используют их для того, чтобы выяснить, что сообщения входят именно в ваш почтовый ящик. Даже если Вы – не UNIX программист, Вы можете использовать регулярные выражения, чтобы упростить ваши приложения, и сэкономить много времени при обходах массивов и манипулиции с переменными. Синтаксис регулярных выраженийСинтаксис регулярных выражений многим должен показаться знакомыми, потому что Вы вероятно использовали их прежде, даже если не понимали, что это были регулярные выражения. Подстановочные знаки являются одним из типов RE операторов – конструкциями повторения. Давайте рассмотрим основные типы синтаксиса, которые составляют наиболее часто используемые части ERE стандарта. Для того, чтобы обеспечить качество примеров определенного использования, я использовал разнообразные приложения. Соответствие символовТрудность регулярных выражений состоит в том, что Вы хотите искать или чему это должно соответствовать. Без этой концепции, RE бесполезны. Каждое выражение будет содержать некоторую команду о том, что искать; см. Таблицу A.
Операторы повторенияОператоры повторения, или квантификаторы, описывают сколько раз нужно искать указанную строку. Они используются вместе с соответствующим символу синтаксисом, чтобы искать многократные вхождения символов; см. Таблицу B. В различных приложениях их поддержка может изменяться или быть неполной, поэтому нужно прочитать документацию к приложению, если вдруг шаблон не работает как ожидалось.
ЯкоряЯкоря описывают где соответствовать шаблону; см. Таблицу C. Они могут быть удобными, когда Вы ищете общие строковые комбинации. Для некоторых из этих примеров, я использовал комманду строчного редактора vi: s, которая обозначает замену. Основной синтаксис для этой команды – s/шаблон_поиска/шаблон_замены/.
ЧередованиеДругая удобная возможность в RE – чередование или вставка оператора. По существу, этот оператор эквивалентен логическому ИЛИ и представлен как символ |. Следующее выражение возвратит все вхождения слов «nerd» и «merd» в файле sample.txt: egrep "(n|m) erd" sample.txt Чередование может быть мощным инструментом когда Вы ищете определенные соответствия строк в файле, например: egrep "[nm] erd" sample.txt. Реальная полезность чередований становится очевидной, когда Вы используете их вместе с некоторыми из более продвинутых особенностей RE. Зарезервированные символыОдна последняя важная концепция в использовании основных регулярных выражений – зарезервированные символы (также называемые специальными символами). Например, если Вы хотите поискать строки "ne*rd" и "ni*rd", соответствующее шаблону выражение "n[ei]*rd" будет соответствовать разновидностям "neeeeerd" и "nieieierd", но не строкам, которые Вы ищете. Поскольку '*' (звездочка) - специальный символ, Вы должны его экранировать, используя наклонную черту влево (\) в вашем шаблоне, так: "n [ei]\*rd". Другие специальные символы (названия на английском языке):
Как только Вы начинаете включать эти символы в регулярные выражения, то уже не кажется удивительным их громоздкость – становится труднее их читать, чем писать. Рассмотрите этот частичный код, который вызывает фуцнкцию eregi в PHP, для проверки правильности адреса электронной почты: eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$sendto) Вот еще один пример. Заменяем глобальную переменную URI именем местного файла: s/http:\/\/www\.domain\.com\/dir\/index\.html/\.\.\/dir\/index\.html/ Как Вы можете видеть, нелекго определить то, что точно происходит в этом регулярном выражении. Но если не экранировать специальные символы при помощи escape последовательности (\), значение нашего шаблона сильно изменится. ЗаключениеВ этой статье я попытался развеять мифы о регулярных выражениях и предложил полезные таблицы более используемуего синтаксиса стандарта ERE. Если Вы интересуетесь более полными описаниями по регулярным выражениям от самой Open Group, вы можете прочитать их спецификации онлайн. Источник: http://sitemaker.ru/
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © "Internet
Zone", info@izcity.com
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone", как на источник получения информации. При этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izcity.com/. При наличии у копируемого материала авторов и источника информации - их также нужно указывать, наряду со ссылкой на нас. Подробнее условия использования материалов смотрите здесь. |