s/\@domain\.com$//;
However, if your question really is, "how do I remove the
domain name from an email address using a regexp", then
the answer is "you don't". Email addresses can be very
complex, and you are better off parsing them.
Abigail | [reply] [d/l] |
As others noted, this problem isn't nearly as simple as it first appears. To be safe, use Mail::Address instead of trying to create your own solution:
use Mail::Address;
my $addr = 'name@domain.com';
my $ma = Mail::Address->new('', $addr);
my $user = $ma->user;
---- I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
-- Schemer
Note: All code is untested, unless otherwise stated
| [reply] [d/l] |
This isn't a regex but is one way to do it:
#!/usr/bin/perl -w
use strict;
use CGI ':standard';
my $email = param('email');
(my $name, my $domain)=split(/\@/, $email);
print "Content-type: text/html\n\n";
print "$name";
| [reply] [d/l] |
Eh, no, it doesn't. As I said in an earlier reply, email
addresses can be complicated. Here's an example were
your approach will fail:
"@"@example.com
Abigail | [reply] [d/l] |
Okay, looking at this in another light ... How does this substitution, which in theory strips the domain and route portion of the email address, fair.
( $domain ) = $email =~ /\@([^\@]+)$/;
Note that this substitution does not handle RFC822 addresses which contains elements beyond the local_part@domain atoms (however this may be considered beyond the scope of this question).
Update - Okay, updated using a subset of the RFC822 email address regular expression from Mastering Regular Expressions to strip off the trailing domain portion to leave the "username" element ...
$email =~ s/(?:\@[\040\t]*(?:(?:[^(\040)<>@,;:"\\\[\]\000-\037\x80-\xf
+f]|(?:\[(\040)<>@,;:"\\\[\]\000-\037\x80-\xff]))+(?!(?:[^(\040)<>@,;:
+"\\\[\]\000-\037\x80-\xff]|(?:\[(\040)<>@,;:"\\\[\]\000-\037\x80-\xff
+])))|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([
+^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(
+?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*
+\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80
+-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015(
+)]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:"\\
+\[\]\000-\037\x80-\xff]|(?:\[(\040)<>@,;:"\\\[\]\000-\037\x80-\xff]))
++(?!(?:[^(\040)<>@,;:"\\\[\]\000-\037\x80-\xff]|(?:\[(\040)<>@,;:"\\\
+[\]\000-\037\x80-\xff])))|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff
+])*\])[\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\
+\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\
+\x80-\xff\n\015()]*)*\)[\040\t]*)*)*)$//;
perl -le 'print+unpack"N",pack"B32","00000000000000000000001001111011"'
| [reply] [d/l] [select] |
| [reply] |