;
如果字符串包含or ,我想拆分它,
。
例如:
$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";
;
如果字符串包含or ,我想拆分它,
。
例如:
$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
包含完整的电子邮件地址,您将处于一个受伤的世界。
相反,使用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}
)
];
输出:
--- - - 一个 - a@a.com - - '测试员,测试' - test@example.com - - C - c@c.com - -d - d@d.com
my $str = 'a@a.com;b@b.com,c@c.com;d@d.com;';
my @result = split /[,;]/, $str;
请注意,您不能使用双引号进行分配$str
,因为@
它很特殊。这就是我用单引号替换字符串分隔符的原因。你也可以像这样逃避它们:
my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";
拆分(/[.;]/, $str)
您也可以使用 Text::Csv 并使用 ";" 或“,”表示拆分。它也有助于查看其他内容,例如可打印字符等。
要回答邮件标题中的问题(与正文略有不同):
my $str = 'abc@xyz;qwe@rty;';
my @addrs = ($str =~ m/(\w+\@[\w\.]+)/g);
print join("<->", @addrs);
用“; ”分割 或者 ”,”
$test = "abc;def,hij";
@result = split(/[;,]/, $test);
正则表达式意味着匹配转义的 ; 或 , 字符。最终结果将是 @result = ['abc','def','hij']