В Perl, как я могу разобрать строку, которая может содержать много адресов электронной почты, чтобы получить список адресов? - PullRequest
1 голос
/ 29 октября 2010

Я хочу разбить строку, если она содержит ; или ,.

Например:

$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";

Ответы [ 6 ]

11 голосов
/ 29 октября 2010

Конечно, вы можете использовать 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
6 голосов
/ 29 октября 2010
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;";
1 голос
/ 29 октября 2010

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

0 голосов
/ 29 октября 2010

Для ответа на вопрос в заголовке письма (немного отличается от его текста):

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

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

print join("<->", @addrs);
0 голосов
/ 29 октября 2010

К разделить на ";" или ","

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

Где регулярное выражение означает совпадение с бежавшим; или персонаж. Конечным результатом будет то, что @result = ['abc', 'def', 'hij']

0 голосов
/ 29 октября 2010

Вы также можете использовать Text :: Csv и использовать либо ";"или "," для расщепления.Это помогает взглянуть на другие вещи, такие как печатные символы и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...