Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Проверка мыла на валидность…

Нужно ли писать такие регулярные выражения (6Кб, между прочим) [ <<> ] или проще переписать на какие-нибудь конечные автоматы? И вообще, такой regexp без форматирования — это ужасно. Тот же Перл поддерживает расширенный синтаксис, где разрешено форматирование и комментирование.
14 комментариев
cujo 2003

Это пример из книги «Mastering Regular Expressions» (от O’Reilly, есть и русский перевод). Для оптимизации по скорости насколько я понял развернули достаточно сложный регексп до такого состояния.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для cujo:

Думаю, его нужно оставить как пример. И не использовать.

zarr 2003

я савсем тупею…
и что если я напишу в поле bolk@exler.ru
то это будет невалидный адрес?
соль где?
и эта… пока писал…
оказывается что учкудук = exreler

Евгений Степанищев (bolknote.ru) 2003

Комментарий для zarr:

почему не валидный?

zarr 2003

тогда другой вопрос:
зачем нужна проверка валидности адреса? ;)

Евгений Степанищев (bolknote.ru) 2003

Комментарий для zarr:

чтобы меньше модератору потом потеть.

cujo 2003

Так он там и оставлен как пример. В самом конце, как приложение. И пожелания хорошо провести время (при анализе ;), если я помню правильно. В книге есть разделы описывающие очень глубоко RE-движки. Автор этим примером показал саму возможность оптимизации по скорости в терминах самих регулярных выражений. И выражение это генерила машина и выполняет его тоже машина. А впечатляются люди…

Там фенька в том, что изза премудростей RFC даже очень красивое Perl-выражение с коментариями выглядит достаточно сурово. Думаю и его мало кто использует в повседневной жизни. 99% проверяют «собаку» и точки.

Евгений Степанищев (bolknote.ru) 2003

Комментарий для cujo:

Да, но в сабжевом топике используют именно этот пример. В реальной жизни. Вот в чём кошмар!

A!e% 2003

Нет, конечно, такое писать в 99% случаев не нужно. Но если я правильно понял, о чем в этом регэкспе речь, то автомат будет в несколько раз короче.

Прочитать, что ли rfc… :) И написать автомат. Или ну его, а?

Евгений Степанищев (bolknote.ru) 2003

Комментарий для A!e%:

Да ну его :) Впрочем, если напишешь — многие скажут «спасибо». :)

A!e% 2003

Почитал RFC. Возникла куча вопросов. Например, в РФЦ указано, что
<i>address = mailbox/group </i>
а этот регэксп учитывает только часть address, или и group тоже. Ну, и подобные вопросы.

Никто не расскажет, где бы эту книжицу поиметь или хотя бы главу, где этот РЕ строится. Самому разобрать можно, но зачем?

Евгений Степанищев (bolknote.ru) 2003

Комментарий для A!e%:

Как где? Заходи во всякие http://www.ozone.ru / http://www.bolero.ru

suzy 2003

2A!e%

«Приложение Б. Программа поиска адресов электронной почты.» Стр. 340-342.

Кстати, есть прекрасный скрипт проверки валидности на php.spb.ru

suzy 2003

2A!e%

Указано, естественно, в русском переводе.