我的同伴问我,你最后会找到@ if more than one
@`。
示例:
j@ssi@aliencoders.com@..coding.com
因此,它应显示j@ssi@aliencoders.com
作为用户名,..coding.com
作为域名。
在Perl中是否有任何一个衬垫正则表达式来获得所需的输出?
答案 0 :(得分:8)
my ($username, $domain) = $str =~ /(.*)@(.*)/;
perlre中的更多信息:
默认情况下,量化的子模式是“贪婪的”,也就是说,它会 匹配尽可能多的次数(给定一个特定的起始位置) 同时仍允许模式的其余部分匹配。
答案 1 :(得分:6)
只需使用贪婪:
/(.*)@(.*)$/
第一部分将尽可能多地使用,直到遇到@。最后一部分将把@后面的所有内容都放到行尾。
答案 2 :(得分:2)
你想要的是一个简单的:
($username, $domain) = ($string =~ /(.*)@(.*)$/);
如果您想100%确定第二部分没有@
,您可以使用:
($username, $domain) = ($string =~ /(.*)@([^@]*)$/);
答案 3 :(得分:2)
$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";
答案 4 :(得分:1)
使用电子邮件::地址。这些事情对于简单的正确做法来说太难了。哎呀,没有读得足够接近,但这段代码适用于拆分电子邮件。
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";
}