воскресенье, 14 февраля 2010 г.

RegExp

Я решил начать не простую тему регулярных выражений, про них можно говорить часами, но я попробую передать общие сведения по этой теме. Регулярные выражения существуют давно, и используются во многих языках программирования, считается что лучше всего в этом преуспел perl, хотя есть основания с этим не соглашаться.

Регулярные выражения это, так сказать, шаблон текста. Они используются для проверки данных веденных пользователем, автоматизации получения информации из текстового документа и других случаях обработки текста.

В теме про чтение с консоли я уже приводил пример, когда пользователь вводит данные с клавиатуры, хорошо бы ему дать возможность пользоваться любым логичным способом ввода данных, такими как: через запятую, через точку с запятой, через пробел, и их комбинации(запятая пробел). Это сложно сделать стандартными средствами строк. Для таких случаев и служат регулярные выражения.

Рассмотрим базовый синтаксис
x — символ x
\0n — символ с восьмеричным кодом n
\xh — символ с шестнадцатеричным кодом n
. — любая буква
[abc] — любая из букв abc
[a-z] — любая из букв от a до z (все маленькие буквы латиницы)
[^abc] — все символы кроме abc
^ — начало текста
$ — конец текста
\ — экранирующий символ (например знак точки будет "\.")
() — группировка символов (в дальнейшем рассмотрим еще одно очень хорошее их свойство)

\t — табуляция
\n — знак переноса строки
\r — знак возврата
\b — граница слова
\d — цифры
\D — не цифры
\s — пустое пространство (пробел, табуляция, etc)
\S — не пустое пространство
\w — символ слова ([a—zA—Z_0—9])
\W — не символ слова

Квантификаторы:
X? — X, 0 или 1
X* — X, 0 и больше раз
X+ — X, 1 и больше раз
X{n} — X, n раз
X{n,} — X, n и больше раз
X{n,m} — X, от n до m раз

| — логическое или

Я привел не все, и так я думаю у вас возникла мысль "куда я попал".

Рассмотрим элементарный пример: нам нужно проверить правильность введенного e—mail адреса, какие у нас требования:
— начинается с буквы
— может содержать цифры, буквы, знаки —_. в любом количестве
— дальше должна идти @
— домен может содержать буквы и цифры
— потом . и 2 или 3 буквы домена 1—го уровня

распишем выражение по частям
[a-z] — начинается с буквы
[a-z0-9\-_.]* — может содержать цифры, буквы, знаки —_.
@ — дальше должна идти @
[a-z0-9] — домен может содержать буквы и цифры
\.[a-z]{2,3} — потом . и 2 или 3 буквы домена 1—го уровня

Что в итоге получилось:
[a-z][a-z0-9\-_.]*@[a-z0-9]\.[a-z]{2,3}
Вот такая страшная штука, но не бойтесь, при реальном использовании все намного страшнее.

Нужно заметить что перед проверкой нужно привести строку к нижнему регистру.

1 комментарий:

  1. Отмечу, что существует два типа регулярных выражений - POSIX(появились раньше) и PCRE (перл совместимые).
    Выше рассмотрены второй вариант, как более мощный и чаще применяемый инструмент.

    ОтветитьУдалить