URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5074
[ Назад ]

Исходное сообщение
"Помогите плиз с регексами"

Отправлено Dr. Nebula , 21-Янв-06 15:29 
Всем привет
Помогите плиз с регексами:
Есть строка вида
[user@mail.ru]-[0.85589599609375]-[1830319.21337891].dat
(все что идет после "[почта]-" может быть различным, например может быть различное кол-во следующих за ним рандомных цифр

Нужен регекс который бы однозначно выдирал только электронный адрес, и ничего более...
Такая конструкция:

    if($file_name =~ /.*\[(.*\@.*\.\w+){1}\]-.*/i) {
        $email = $1;
        print "$email\n";
    }

Почему то не хочет адекватно работать
Хелп плиз, надо срочно :(


Содержание

Сообщения в этом обсуждении
"Помогите плиз с регексами"
Отправлено gr , 22-Янв-06 02:40 
>Всем привет
>Помогите плиз с регексами:
>Есть строка вида
>[user@mail.ru]-[0.85589599609375]-[1830319.21337891].dat
>(все что идет после "[почта]-" может быть различным, например может быть различное
>кол-во следующих за ним рандомных цифр
>
>Нужен регекс который бы однозначно выдирал только электронный адрес, и ничего более...
>
>Такая конструкция:
>
> if($file_name =~ /.*\[(.*\@.*\.\w+){1}\]-.*/i) {
>  $email = $1;
>  print "$email\n";
> }
>
>Почему то не хочет адекватно работать
>Хелп плиз, надо срочно :(

/^\[\w+\@\w+\.\w+\]/

так точнее

.* - очень жадный, у тебя в первом же .* сьедается вся строка. Помни про .*?  - это минимальное совпадение.


"Помогите плиз с регексами"
Отправлено gr , 22-Янв-06 02:41 
>>Всем привет
>>Помогите плиз с регексами:
>>Есть строка вида
>>[user@mail.ru]-[0.85589599609375]-[1830319.21337891].dat
>>(все что идет после "[почта]-" может быть различным, например может быть различное
>>кол-во следующих за ним рандомных цифр
>>
>>Нужен регекс который бы однозначно выдирал только электронный адрес, и ничего более...
>>
>>Такая конструкция:
>>
>> if($file_name =~ /.*\[(.*\@.*\.\w+){1}\]-.*/i) {
>>  $email = $1;
>>  print "$email\n";
>> }
>>
>>Почему то не хочет адекватно работать
>>Хелп плиз, надо срочно :(
>
>/^\[\w+\@\w+\.\w+\]/
>
>так точнее
>
>.* - очень жадный, у тебя в первом же .* сьедается вся
>строка. Помни про .*?  - это минимальное совпадение.


/^\[(\w+\@\w+\.\w+)\]/

ой, скобочки забыл для $1


"Помогите плиз с регексами"
Отправлено mthawk , 26-Янв-06 12:06 
>>/^\[\w+\@\w+\.\w+\]/
>>
>>так точнее
>>
>>.* - очень жадный, у тебя в первом же .* сьедается вся
>>строка. Помни про .*?  - это минимальное совпадение.
>
>
>/^\[(\w+\@\w+\.\w+)\]/
>
>ой, скобочки забыл для $1


Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания. Если в e-mail есть точка - он этого не учтет.
а доменную часть я бы тоже модифицировал, для универсальности.
посему имеем:

/^\[((\w|\.)+\@(\w|\.)+)\]/


"Помогите плиз с регексами"
Отправлено Onix , 26-Янв-06 14:47 
>>>/^\[\w+\@\w+\.\w+\]/
>>>
>>>так точнее
>>>
>>>.* - очень жадный, у тебя в первом же .* сьедается вся
>>>строка. Помни про .*?  - это минимальное совпадение.
>>
>>
>>/^\[(\w+\@\w+\.\w+)\]/
>>
>>ой, скобочки забыл для $1
>
>
>Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания.
>Если в e-mail есть точка - он этого не учтет.
>а доменную часть я бы тоже модифицировал, для универсальности.
>посему имеем:
>
>/^\[((\w|\.)+\@(\w|\.)+)\]/

Я решил не искать легких путей :)

/([\w+\-\.]+\@[\w\-\.]+\.\w{2,3})(.*)/


"Помогите плиз с регексами"
Отправлено chip , 26-Янв-06 17:45 
>Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания.
>Если в e-mail есть точка - он этого не учтет.

Согласно RFC e-mail не может содержать точек в __имени пользователя__.

>а доменную часть я бы тоже модифицировал, для универсальности.
>посему имеем:
>
>/^\[((\w|\.)+\@(\w|\.)+)\]/