在Perl中,如何解析可能包含许多电子邮件地址的字符串以获得地址列表?

在Perl中,如何解析可能包含许多电子邮件地址的字符串以获得地址列表?,perl,parsing,email-address,Perl,Parsing,Email Address,如果字符串包含,我想拆分该字符串或, 例如: $str = "a@a.com;b@b.com,c@c.com;d@d.com;"; 预期结果是: result[0]="a@a.com"; result[1]="b@b.com"; result[2]="c@c.com"; result[3]="d@d.com"; 请注意,不能使用双引号分配$str,因为@是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们: my $str = "a\@a.com;b\@b.com,c\@c

如果字符串包含
,我想拆分该字符串

例如:

$str = "a@a.com;b@b.com,c@c.com;d@d.com;";
预期结果是:

result[0]="a@a.com";
result[1]="b@b.com";
result[2]="c@c.com";
result[3]="d@d.com";
请注意,不能使用双引号分配
$str
,因为
@
是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们:

my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";
请注意,不能使用双引号分配
$str
,因为
@
是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们:

my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";

拆分(/[.;]/,$str)

拆分(/[.;]/,$str)

您也可以使用Text::Csv并使用“;”或“,”进行拆分。它还有助于查看其他内容,如可打印字符等。

您也可以使用Text::Csv并使用“;”或“,”进行拆分。它还有助于查看其他内容,如可打印字符等。

to by“;”或“,”

如果正则表达式意味着匹配逃逸的数据;或者,性格。 最终结果将是@result=['abc','def','hij']

To by“,”或“,”

如果正则表达式意味着匹配逃逸的数据;或者,性格。 最终结果将是@result=['abc'、'def'、'hij']

当然,您可以像其他人所示那样使用。但是,如果
$str
包含完整的电子邮件地址,您将处于一个受伤的世界

相反,请使用:

#/usr/bin/perl
严格使用;使用警告;
使用电子邮件::地址;
使用YAML;
打印转储[映射[$\->名称,$\->地址],
电子邮件::地址->解析(
q{a@a.com“测试者,测试”,c@c.com;d@d.com}
)
];
输出:

--- - - a - a@a.com - - 'Tester, Test' - test@example.com - - c - c@c.com - - d - d@d.com --- - -a - a@a.com - -'测试人员,测试' - test@example.com - -c - c@c.com - -d - d@d.com当然,您可以按其他人所示使用。但是,如果
$str
包含完整的电子邮件地址,您将处于一个受伤的世界

相反,请使用:

#/usr/bin/perl
严格使用;使用警告;
使用电子邮件::地址;
使用YAML;
打印转储[映射[$\->名称,$\->地址],
电子邮件::地址->解析(
q{a@a.com“测试者,测试”,c@c.com;d@d.com}
)
];
输出:

--- - - a - a@a.com - - 'Tester, Test' - test@example.com - - c - c@c.com - - d - d@d.com --- - -a - a@a.com - -'测试人员,测试' - test@example.com - -c - c@c.com - -d
- d@d.com回答邮件标题中的问题(与正文稍有不同):

my$str='1!'abc@xyz;qwe@rty;';
我的@addrs=($str=~m/(\w+\@[\w\.]+)/g);
打印连接(“,@addrs);

回答邮件标题中的问题(与正文稍有不同):

my$str='1!'abc@xyz;qwe@rty;';
我的@addrs=($str=~m/(\w+\@[\w\.]+)/g);
打印连接(“,@addrs);

可能应该执行类似于
grep{$}split(/[,;]/,$str)
的操作,以防止列表末尾出现空白项。@mscha:没有必要。默认情况下,
split
函数删除空的尾随字段。今天学到了一些新东西。:-)谢谢。+1指出,
@
插入双引号字符串。OP不能启用警告。可能应该执行类似于
grep{$}split(/[,;]/,$str)
的操作,以防止列表末尾出现空白项。@mscha:没有必要。默认情况下,
split
函数删除空的尾随字段。今天学到了一些新东西。:-)谢谢。+1指出,
@
插入双引号字符串。OP必须没有启用警告。好点,+1。如果您的示例包含类似于
“Tester,Test”
(许多邮件程序都会生成)的内容,则效果会更好。好的观点,+1。如果您的示例包含类似于
“Tester,Test”
(许多邮件程序都会生成)的内容,则效果会更好。您必须始终启用警告:
perl-we'$x=”a@acom“
:可能在-e第1行的字符串中意外插入@acom。您必须始终启用警告:
perl-we'$x=”a@acom"
:在-e第1行的字符串中可能意外插入@acom。 --- - - a - a@a.com - - 'Tester, Test' - test@example.com - - c - c@c.com - - d - d@d.com
my $str = 'abc@xyz;qwe@rty;';

my @addrs = ($str =~ m/(\w+\@[\w\.]+)/g);

print join("<->", @addrs);