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

Написано 03/11/2009

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

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

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

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

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

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

Ой*

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

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

Онa?

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

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

Му+

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

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

Голоден ?

(в данном случае между словом и вопросительным знаком должен быть слэш – wp сжирает код) даст вам и “Голоден?”. Спецсимволы: [ ] \ ^ $ . | ? * + ( ) { }.

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

Го.

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

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

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

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

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

Го[лнт]

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

[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]+$

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