1

;文字列にまたはが含まれている場合は、文字列を分割したいと思います,

例えば:

$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@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

split(/[.;]/、$ str)

于 2010-10-29T10:47:45.760 に答える
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 に答える
0

Text::Csv を使用して、「;」を使用することもできます。または「,」で分割します。印刷可能な文字などの他のものを見るのにも役立ちます。

于 2010-10-29T10:52:52.130 に答える