вторник, 3 ноября 2009 г.

Небольшой FAQ по регулярным выражениям

Регулярные выражения — система синтаксического разбора текстовых фрагментов по формализованному шаблону, основанная на системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, по-русски также иногда называют “шаблоном”, “маской”.


Вот о них, а точнее их применении и поговорим. В разрезе ColdFusion.


Всё для меня началось с того, что как только я увидел паттерны – я ужаснулся: “как это запомнить?”, – пронеслось у меня в голове. Но разобравшись в основах – всё встало на свои места, и теперь без регулярных выражений я не представляю себе решение обычных задач – вроде очистки текста от html-кода, проверка e-mail на валидность, и тому подобное.


Для начала, разберёмся в основах – то есть тех таинственных сочетаниях различных символов, которые и составляют паттерн. Это не трудно!


Смотрим и запоминаем:



* – значит зеро, один или больше – то есть, паттерн

Ой*

даст вам и “Оййййй” и “О”.



? – значит зеро или один – то есть, паттерн


Он?

даст вам и “Он” и “Она”.



+ – значит один или больше – то есть, паттерн


Му+

даст вам и “Му” и “Муу”, но не “М”.



\ – исключит спецсимвол – то есть, паттерн


Голоден?

даст вам и “Голоден?”. Спецсимволы: [ ] \ ^ $ . | ? * + ( ) { }.


. – значит любой символ – то есть, паттерн


Го.

даст вам и “Гол” и “Гот”.


( ) – группировка, используется как правило с другим символом – | – то есть, паттерн


(Красн|Зелен)ый.

даст вам и “Красный” или “Зеленый”.


[ ] – значит перебор символов – то есть, паттерн


Го[лнт]

даст вам и “Гол” или “Гон” или “Гот”, а если паттерн будет


[0-9]+

, то это – любое число, если же это будет


[a-zA-Z]

, то это – любые буквы алфавита в любом регистре, а вот если это будет


[^0-9]

, то это значит любой символ за исключением чисел.


{ } – специальная группировка, указывающая число вхождений – то есть, паттерн


[0-9]{3}

даст вам “315”, но не “31”. А паттерн


[0-9]{2,5}

даст вам “12, “123”, “1234” и “12345”.


Это же правило действует и на буквы —


a{2,5}

даст “аа”, “ааа”, “аааа” и “ааааа”.


^ – значит начало строки – то есть, паттерн


^ftp

даст вам строку, начинающуюся с “ftp”.


$ – значит конец строки – то есть, паттерн


un$

даст вам строку, заканчивающуюся на “un” – к примеру — “injun”.


Собственно – это и есть главные правила.


Теперь приведу список наиболее необходимых паттернов для cf-программистов. Но, прежде – напомню, что в ColdFusion паттерны используются в сочетании со строковыми функциями, начинающимися с RE – что и обозначает регулярные выражения – Regular Expressions. Вот их список:


REFind


REFindNoCase


REMatch


REMatchNoCase


REReplace


REReplaceNoCase


Хотя, регулярные выражения используются также в тегах cfinput и cftextinput – тоже весьма удобно и необходимо.


Ну-с, начнём.


Удалить все html-теги из текста можно так:



new_text=rereplacenocase(html_text,"<[^>]*>","","ALL");


Защитимся от непотребных URL’ов – уберём из них символы “;”, ‘’, “!”, “select”, “SELECT”, “insert” и “INSERT”:



new_qs=rereplacenocase(cgi.query_string,‘(;|"|!|select|SELECT|insert|INSERT)’,‘’, ‘all’);


Сверим e-mail?:



^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(.[a-zA-Z0-9-]+)*.(([0-9]{ 1,3})|([a-zA-Z]{2,6})|(aero|coop|info|museum|name))


Пусть пользователь вводит правильное имя:



^[a-zA-Z0-9]+$


Если есть что добавить – пишите! :)


Комментариев нет:

Отправить комментарий