;
文字列にまたはが含まれている場合は、文字列を分割したいと思います,
。
例えば:
$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 = "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@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;";
split(/[.;]/、$ str)
メールのタイトルの質問に答えるには(テキストとは少し異なります):
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'] になります
Text::Csv を使用して、「;」を使用することもできます。または「,」で分割します。印刷可能な文字などの他のものを見るのにも役立ちます。