我的同事问我如何查找最后一个出现的不止一个@符号
@。
示例:
j@ssi@aliencoders.com@..coding.com
所以它应该显示
j@ssi@aliencoders.com
作为用户名和..coding.com
作为域名。在Perl中有没有一行正则表达式可以得到所需的输出?我的同事问我如何查找最后一个出现的不止一个@符号
@。
示例:
j@ssi@aliencoders.com@..coding.com
j@ssi@aliencoders.com
作为用户名和..coding.com
作为域名。在Perl中有没有一行正则表达式可以得到所需的输出?my ($username, $domain) = $str =~ /(.*)@(.*)/;
更多信息请参见perlre:
默认情况下,量化子模式是“贪婪”的,也就是说,它会尽可能地匹配多次(在特定的起始位置),同时仍然允许其余部分匹配。
只需使用贪心算法:
/(.*)@(.*)$/
第一部分会尽可能地获取内容,直到遇到 @ 符号。最后一部分则会获取从 @ 符号后一直到行末的所有内容。
$str='j@ssi@aliencoders.com@..coding.com';
$user=qw();
$domain=qw();
while($str=~m/\@/g){
$user=$`;
$domain=$';
}
print "user -> $user\n";
print "domain->$domain\n";
$user
和 $domain
变量? - Nathan Fellman($username, $domain) = ($string =~ /(.*)@(.*)$/);
@
,您可以使用:($username, $domain) = ($string =~ /(.*)@([^@]*)$/);
use strict;
use warnings;
use Email::Address;
my $line = 'bill@example.com;joe@example.com';
my @addresses = Email::Address->parse($line);
for my $address (@addresses) {
print $address->format, "\n";
}