如果字符串包含;
或,
,我想拆分它。
例如:
$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";
答案 0 :(得分:11)
当然,您可以使用其他人显示的split。但是,如果$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@a.com - - 'Tester, Test' - test@example.com - - c - c@c.com - - d - d@d.com
答案 1 :(得分:6)
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;";
答案 2 :(得分:1)
split(/[.;]/, $ str)
答案 3 :(得分:0)
你也可以使用Text :: Csv并使用“;”或“,”用于分裂。它也有助于查看其他内容,如可打印字符等。
答案 4 :(得分:0)
通过“;”到split或“,”
$test = "abc;def,hij";
@result = split(/[;,]/, $test);
正则表达式意味着匹配转义;或者,性格。 最终结果是@result = ['abc','def','hij']
答案 5 :(得分:0)
回答邮件标题中的问题(与文字略有不同):
my $str = 'abc@xyz;qwe@rty;';
my @addrs = ($str =~ m/(\w+\@[\w\.]+)/g);
print join("<->", @addrs);