2013-10-12 5 views
0

У меня есть файл со списком имен пользователей и адресов электронной почты, и мне нужны два выражения. Один, чтобы получить адреса электронной почты (они всегда заканчиваются на .com или .net или .org) и один, чтобы получить имена пользователей.Извлечь имена пользователей или адрес электронной почты/домен после @ знака

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

@stackoverflow.com 
@google.com 
@example.com 

Я попытался

^@.*?..*?$ 

Пользователи

@Perl 
@Python 
@PHP 

Я попытался

^@.*?$ 

Любые предложения хороши.

ответ

0

В вашем первом выражении это будет соответствовать, если вы избежали точки \. до последнего .*?. Ваше второе выражение просто четко соответствует целым строкам. Чтобы совместить, но исключить @, вы могли бы сделать ..

Для областей применения:

^@(\S+\.[^\s]+)$ 

Регулярное выражение:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
\S+   non-whitespace (all but \n, \r, \t, \f, and " ") (1 or more times)  
\.   '.' 
[^\s]+  any character except: whitespace (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

live demo См

Для пользователей используют:

^@([^\s.]+)$ 

Регулярное выражение:

^    the beginning of the string 
@    '@' 
(   group and capture to \1: 
[^\s.]+  any character except: whitespace or '.' (1 or more times) 
)    end of \1 
$    before an optional \n, and the end of the string 

См live demo

0

Вы могли бы сделать что-то вроде этого для доменов:

^@[^.]+\.[^.]+$ 

Это будет соответствовать начало строки, за которым следует @, а затем один или более любых символов кроме., а затем a ., за которым следует один или более символов , кроме., за которым следует конец строки.

Но это не приведет к захвату доменов с более чем двумя частями (например, @meta.stackoverflow.com). Если это важно, чтобы вы могли бы попробовать это вместо:

^@[^.]+(\.[^.]+)+$ 

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

И это для пользователей:

^@[^.]+$ 

Это будет соответствовать начало строки, за которым следует @, а затем один или более любых символов кроме., а затем к концу строка.

+0

Это соответствует @ на следующих строках? – Joec

0

попробовать это

ПОЛЬЗОВАТЕЛЕЙ (? ?. < = @) \ ш +

EMAIL (< = @) \ ш + (?: ком | чистый | орг)

EDIT: ммм вы не предусмотрели, что движок регулярных выражений вы» re running on, это основано на pcre, но любой движок с lookbehind, скорее всего, будет иметь тот же синтаксис

Смежные вопросы