Reputation: 6042
Can anyone help me with a regular expression that will return the end part of an email address, after the @ symbol? I'm new to regex, but want to learn how to use it rather than writing inefficient .Net string functions!
E.g. for an input of "[email protected]" I need an output of "example.com".
Cheers! Tim
Upvotes: 11
Views: 36681
Reputation: 12499
Another shorter example is @([\w.-]+)\.
https://regex101.com/r/gmOH52/2
Upvotes: 0
Reputation: 1
(@)(\w+\-|\w+)+(\.)
I am no expert but the above expression is what you need to grab the domain from an e-mail, at least as far as I can tell.
The problem is as pointed out that you grab not only the domain but the "@" and ".". To access the domain name in regex you use "$2"and to preserve the "@" and ".", you could use an expression like:
$1newdomain$3
The site above is a good place to try regex to see how and if it works.
Upvotes: 0
Reputation: 48246
Wow, all the answers here are not quite right.
An email address can have as many "@" as you want, and the last one isn't necessarily the one before the domain :(
for example, this is a valid email address:
[email protected](i'm a comment (with an @))
You'd have to be pretty mean to make that your email address though.
So first, parse out any comments at the end.
Then
int atIndex = emailAddress.LastIndexOf("@");
String domainPart = emailAddress.Substring(atIndex + 1);
Upvotes: 3
Reputation: 11
Try this regular expression:
(?<=([\w-\.]@))((?:[\w]+\.)+)([a-zA-Z]{2,4})
Upvotes: 1
Reputation: 4495
[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"
Upvotes: 1
Reputation: 38252
This is a general-purpose e-mail matcher:
[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])
Note that it only captures the domain group; if you use the following, you can capture the part proceeding the @
also:
([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])
I'm not sure if this meets RFC 2822, but I doubt it.
Upvotes: 4
Reputation: 61469
A regular expression is quite heavy machinery for this purpose. Just split the string containing the email address at the @
character, and take the second half. (An email address is guaranteed to contain only one @
character.)
Upvotes: 15
Reputation: 2897
A simple regex for your input is:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$
But, it can be useless when you apply for a broad and heterogeneous domains.
An example is:
^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(?:[A-Z]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)$
But, you can optimize that suffix domains as you need.
But for your suffix needs, you need just:
@.+$
Resources: http://www.regular-expressions.info/email.html
Upvotes: 3
Reputation: 46774
@(.*)$
This will match with the @, then capture everything up until the end of input ($)
Upvotes: 14