1

;如果字符串包含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";
4

6 回答 6

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}
    )
];

输出:

---
-
  - 一个
  - a@a.com
-
  - '测试员,测试'
  - test@example.com
-
  - C
  - c@c.com
-
  -d
  - d@d.com
于 2010-10-29T12:12:37.053 回答
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;";
于 2010-10-29T10:47:28.030 回答
1

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

于 2010-10-29T10:47:45.760 回答
0

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

于 2010-10-29T10:52:52.130 回答
0

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

my $str = 'abc@xyz;qwe@rty;';

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

print join("<->", @addrs);
于 2010-10-29T13:55:51.380 回答
0

用“; ”分割 或者 ”,”

$test = "abc;def,hij";
@result = split(/[;,]/, $test);

正则表达式意味着匹配转义的 ; 或 , 字符。最终结果将是 @result = ['abc','def','hij']

于 2010-10-29T11:00:34.880 回答