2009-09-28 8 views
10

Czy ktoś może mi pomóc z wyrażeniem regularnym, które zwróci końcową część adresu e-mail po symbolu @? Jestem nowy w regex, ale chcę się nauczyć, jak go używać, zamiast pisać nieefektywne funkcje łańcuchowe .NET!Wyrażenie regularne dla domeny z adresu e-mail

E.g. aby wprowadzić "[email protected]", potrzebuję wyjścia "example.com".

Pozdrawiam! Tim

Odpowiedz

16

Wyrażenie regularne jest dość ciężki sprzęt do tego celu. Po prostu podziel ciąg zawierający adres e-mail na znak @ i weź drugą połowę. (Adres e-mail jest gwarancją zawierać tylko jeden @ charakter.)

+4

To nie jest technicznie prawdziwe, ponieważ możesz mieć wiele @ znaków wtedy i tylko wtedy, gdy znak @ jest w cudzysłowie http://en.wikipedia.org/wiki/Email_address#Syntax Dla wszystkich zamiarów i celów adresu e-mail weryfikacja, jeden znak @ jest rozdzielaczem. –

14

@ (. *) $

To będzie pasował z @, a następnie uchwycić wszystko aż do końca wejścia ($)

+3

Dzięki! Dostaję "@ example.com". Czy mogę uzyskać wartość bez znaku @? – TimS

+1

Prawdopodobnie nie dostaniesz odpowiedniej grupy. Nawias '(', ')' wskazuje dopasowanie grupy, więc upewnij się, że pobierasz wynik z grupy o indeksie 1, a nie 0 (ponieważ indeks nr 0 jest zawsze zarezerwowany dla całego dopasowania wyrażenia). –

+0

To jest poprawna odpowiedź, ponieważ PO specjalnie prosił o wyrażenie regularne ... które, nawiasem mówiąc, było tym, czego szukałem, kiedy tu przybyłem :) –

2

Proste regex do wejścia jest:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$ 

Ale może być bezużyteczny, gdy ubiegasz się o szerokie i heterogeniczne domeny.

Przykładem jest:

^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)$ 

Ale można zoptymalizować, że domeny sufiks jak trzeba.

Ale dla potrzeb sufiks, trzeba po prostu:

@ + $

Resources. http://www.regular-expressions.info/email.html

+0

faktycznie [regex jest nieco dłuższy] (http: //cpansearch.perl. org/src/RJBS/Email-Valid-0.182/lib/Email/Valid.pm) – xxxxxxx

+0

Polecam ten program, ponieważ jest mniej restrykcyjny. –

+0

Po prostu nie zapomnij przechwycić domeny do grupy, jak zapytano:^^ A-Z0-9 ._% + -] + @ ([A-Z0-9 .-] + \. [AZ] { 2,4}) $ ' –

3

Jest to ogólnego przeznaczenia email dopasowujący:

[a-zA-Z][\w\.-]*[a-zA-Z0-9]@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]) 

Należy pamiętać, że to tylko oddaje grupę domeny; jeśli używać następujących można uchwycić część przystąpieniem @ również:

([a-zA-Z][\w\.-]*[a-zA-Z0-9])@([a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]) 

Nie jestem pewien, czy to spełnia RFC 2822, ale wątpię w to.

1
[email protected]; 
// now you want to fetch gmail from input user PHP's inbuilt function 
preg_match('/@(.*)/', $input, $output); 
echo $output[1]; // it'll print "gmail.com" 
  • Dokumentacja funkcji: preg_match()
+2

Ten link nie ma absolutnie nic wspólnego z pytaniem zamieszczonym tutaj. ** Nie po prostu linkuj do swojej witryny w ten sposób **, bo zauważysz, że Twoje posty zostały usunięte jako spam. Usuwam link dla Ciebie. –

+0

Wiem, że nie ma to nic wspólnego z pytaniem, ale link zawiera bardzo trudny przykład, więc myślę, że będzie on przydatny dla innych ... Ok, zaopiekuję się nim następnym razem. Dzięki :-) –

1

Spróbuj tego wyrażenia regularnego:

(?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4}) 
+0

(? <= ([\ W - \.] @)) ((?: [\ W] + \.) +) ([A-zA-Z] {2,4}) –

2

Wow, wszyscy tutaj odpowiedzi nie są dość dobrze.

Adres e-mail może mieć tyle „@”, jak chcesz, a ostatni z nich nie jest koniecznie jeden przed domenie :(

na przykład, czy jest to prawidłowy adres e-mail:

[email protected](i'm a comment (with an @)) 

Musisz jednak być bardzo wredny, aby zrobić swój adres e-mailowy.

Po pierwsze, przeanalizuj wszystkie komentarze na końcu.

Następnie

int atIndex = emailAddress.LastIndexOf("@"); 
String domainPart = emailAddress.Substring(atIndex + 1); 
0
(@)(\w+\-|\w+)+(\.) 

Nie jestem ekspertem, ale powyższe wyrażenie jest co trzeba chwycić domenę e-mail, przynajmniej o ile mogę powiedzieć.

Problem polega na tym, że chwyta się nie tylko domenę, ale "@" i ".". Aby uzyskać dostęp do nazwy domeny w regex użyć „$ 2” i zachować „@” i można użyć wyrażeń takich jak „”:

$1newdomain$3 

http://www.regexr.com/

Witryna powyżej jest dobrym miejscem wypróbować wyrażenie regularne, aby zobaczyć, jak i czy działa.