Всем привет
Помогите плиз с регексами:
Есть строка вида
[user@mail.ru]-[0.85589599609375]-[1830319.21337891].dat
(все что идет после "[почта]-" может быть различным, например может быть различное кол-во следующих за ним рандомных цифрНужен регекс который бы однозначно выдирал только электронный адрес, и ничего более...
Такая конструкция:if($file_name =~ /.*\[(.*\@.*\.\w+){1}\]-.*/i) {
$email = $1;
print "$email\n";
}Почему то не хочет адекватно работать
Хелп плиз, надо срочно :(
>Всем привет
>Помогите плиз с регексами:
>Есть строка вида
>[user@mail.ru]-[0.85589599609375]-[1830319.21337891].dat
>(все что идет после "[почта]-" может быть различным, например может быть различное
>кол-во следующих за ним рандомных цифр
>
>Нужен регекс который бы однозначно выдирал только электронный адрес, и ничего более...
>
>Такая конструкция:
>
> if($file_name =~ /.*\[(.*\@.*\.\w+){1}\]-.*/i) {
> $email = $1;
> print "$email\n";
> }
>
>Почему то не хочет адекватно работать
>Хелп плиз, надо срочно :(/^\[\w+\@\w+\.\w+\]/
так точнее
.* - очень жадный, у тебя в первом же .* сьедается вся строка. Помни про .*? - это минимальное совпадение.
>>Всем привет
>>Помогите плиз с регексами:
>>Есть строка вида
>>[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
>>/^\[\w+\@\w+\.\w+\]/
>>
>>так точнее
>>
>>.* - очень жадный, у тебя в первом же .* сьедается вся
>>строка. Помни про .*? - это минимальное совпадение.
>
>
>/^\[(\w+\@\w+\.\w+)\]/
>
>ой, скобочки забыл для $1
Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания. Если в e-mail есть точка - он этого не учтет.
а доменную часть я бы тоже модифицировал, для универсальности.
посему имеем:/^\[((\w|\.)+\@(\w|\.)+)\]/
>>>/^\[\w+\@\w+\.\w+\]/
>>>
>>>так точнее
>>>
>>>.* - очень жадный, у тебя в первом же .* сьедается вся
>>>строка. Помни про .*? - это минимальное совпадение.
>>
>>
>>/^\[(\w+\@\w+\.\w+)\]/
>>
>>ой, скобочки забыл для $1
>
>
>Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания.
>Если в e-mail есть точка - он этого не учтет.
>а доменную часть я бы тоже модифицировал, для универсальности.
>посему имеем:
>
>/^\[((\w|\.)+\@(\w|\.)+)\]/Я решил не искать легких путей :)
/([\w+\-\.]+\@[\w\-\.]+\.\w{2,3})(.*)/
>Увы, согласно спецификации \w - выбирает букву или цифру или символ подчеркивания.
>Если в e-mail есть точка - он этого не учтет.Согласно RFC e-mail не может содержать точек в __имени пользователя__.
>а доменную часть я бы тоже модифицировал, для универсальности.
>посему имеем:
>
>/^\[((\w|\.)+\@(\w|\.)+)\]/