use strict;
my $str = 'bhagat.ali@gmail.com
bhagat.ali@gmail
abhagat@capitalone.com
bhagat.ali@gmail.co.in
bhagat.ali@gmail.co-in
bhagat.ali@gmail.co.
bhagat.ali@gmail.co.in.ca
bhagat.ali@gmail.co.in.ca.
bhagat.ali@gmail...com
ali!b@gmail.com
ali#b@gmail.com
ali$b@gmail.com
ali%b@gmail.com
ali&b@gmail.com
ali\'b@gmail.com
ali***$$$b@gmail.com
ali+++b@gmail.com
ali////b@gmail.com
ali===Tets@gmail.com
ali????b@gmail.com
ali^^^^^^b@gmail.com
ali____b@gmail.com
ali````b@gmail.com
ali{{{{}}}}b@gmail.com
ali|||||b@gmail.com
ali~~~~b@gmail.com
ali------b@gmail.com
bhagat.ali@12345678901234567890123456789012345678901234567890123456789012345678.com
bhagat.ali@12345678901234567890123456789012345678901234567890123456789012345.com
bhagat@c.99a';
my $regex = qr/^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,64}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,64}[a-z])?){1,2}$/mip;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html