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

pra*_*abu 1 perl parsing email-address

我想分割一个字符串,如果它包含;,.

例如:

$str = "a@a.com;b@b.com,c@c.com;d@d.com;";
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

result[0]="a@a.com";
result[1]="b@b.com";
result[2]="c@c.com";
result[3]="d@d.com";
Run Code Online (Sandbox Code Playgroud)

Sin*_*nür 11

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

相反,使用Email :: Address:

#!/usr/bin/perl

use strict; use warnings;
use Email::Address;
use YAML;

print Dump [ map [$_->name, $_->address ],
    Email::Address->parse(
        q{a@a.com;"Tester, Test" <test@example.com>,c@c.com;d@d.com}
    )
];
Run Code Online (Sandbox Code Playgroud)

输出:

---
-
  - a
  - a@a.com
-
  - 'Tester, Test'
  - test@example.com
-
  - c
  - c@c.com
-
  - d
  - d@d.com


Mar*_*tos 6

my $str = 'a@a.com;b@b.com,c@c.com;d@d.com;';
my @result = split /[,;]/, $str;
Run Code Online (Sandbox Code Playgroud)

请注意,您不能使用双引号来分配,$str因为它@是特殊的.这就是我用单引号替换字符串分隔符的原因.你也可以像这样逃避它们:

my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";
Run Code Online (Sandbox Code Playgroud)

  • @mscha:没有必要.默认情况下,`split`函数删除空尾随字段. (2认同)