在Perl中,如何解析可能包含许多电子邮件地址的字符串以获得地址列表?
如果字符串包含在Perl中,如何解析可能包含许多电子邮件地址的字符串以获得地址列表?,perl,parsing,email-address,Perl,Parsing,Email Address,如果字符串包含,我想拆分该字符串或, 例如: $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,因为@是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们: my $str = "a\@a.com;b\@b.com,c\@c
,我想拆分该字符串代码>或,
例如:
$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
,因为@
是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们:
my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";
请注意,不能使用双引号分配$str
,因为@
是特殊的。这就是我用单引号替换字符串分隔符的原因。你也可以这样逃离他们:
my $str = "a\@a.com;b\@b.com,c\@c.com;d\@d.com;";
拆分(/[.;]/,$str)拆分(/[.;]/,$str)您也可以使用Text::Csv并使用“;”或“,”进行拆分。它还有助于查看其他内容,如可打印字符等。您也可以使用Text::Csv并使用“;”或“,”进行拆分。它还有助于查看其他内容,如可打印字符等。to by“;”或“,”
如果正则表达式意味着匹配逃逸的数据;或者,性格。
最终结果将是@result=['abc','def','hij']To by“,”或“,”
如果正则表达式意味着匹配逃逸的数据;或者,性格。
最终结果将是@result=['abc'、'def'、'hij']当然,您可以像其他人所示那样使用。但是,如果$str
包含完整的电子邮件地址,您将处于一个受伤的世界
相反,请使用:
#/usr/bin/perl
严格使用;使用警告;
使用电子邮件::地址;
使用YAML;
打印转储[映射[$\->名称,$\->地址],
电子邮件::地址->解析(
q{a@a.com“测试者,测试”,c@c.com;d@d.com}
)
];
输出:
---
-
- a
- a@a.com
-
- 'Tester, Test'
- test@example.com
-
- c
- c@c.com
-
- d
- d@d.com
---
-
-a
- a@a.com
-
-'测试人员,测试'
- test@example.com
-
-c
- c@c.com
-
-d
- d@d.com当然,您可以按其他人所示使用。但是,如果$str
包含完整的电子邮件地址,您将处于一个受伤的世界
相反,请使用:
#/usr/bin/perl
严格使用;使用警告;
使用电子邮件::地址;
使用YAML;
打印转储[映射[$\->名称,$\->地址],
电子邮件::地址->解析(
q{a@a.com“测试者,测试”,c@c.com;d@d.com}
)
];
输出:
---
-
- a
- a@a.com
-
- 'Tester, Test'
- test@example.com
-
- c
- c@c.com
-
- d
- d@d.com
---
-
-a
- a@a.com
-
-'测试人员,测试'
- test@example.com
-
-c
- c@c.com
-
-d
- d@d.com回答邮件标题中的问题(与正文稍有不同):
my$str='1!'abc@xyz;qwe@rty;';
我的@addrs=($str=~m/(\w+\@[\w\.]+)/g);
打印连接(“,@addrs);
回答邮件标题中的问题(与正文稍有不同):
my$str='1!'abc@xyz;qwe@rty;';
我的@addrs=($str=~m/(\w+\@[\w\.]+)/g);
打印连接(“,@addrs);
可能应该执行类似于grep{$}split(/[,;]/,$str)
的操作,以防止列表末尾出现空白项。@mscha:没有必要。默认情况下,split
函数删除空的尾随字段。今天学到了一些新东西。:-)谢谢。+1指出,@
插入双引号字符串。OP不能启用警告。可能应该执行类似于grep{$}split(/[,;]/,$str)
的操作,以防止列表末尾出现空白项。@mscha:没有必要。默认情况下,split
函数删除空的尾随字段。今天学到了一些新东西。:-)谢谢。+1指出,@
插入双引号字符串。OP必须没有启用警告。好点,+1。如果您的示例包含类似于“Tester,Test”
(许多邮件程序都会生成)的内容,则效果会更好。好的观点,+1。如果您的示例包含类似于“Tester,Test”
(许多邮件程序都会生成)的内容,则效果会更好。您必须始终启用警告:perl-we'$x=”a@acom“
:可能在-e第1行的字符串中意外插入@acom。您必须始终启用警告:perl-we'$x=”a@acom"
:在-e第1行的字符串中可能意外插入@acom。
---
-
- a
- a@a.com
-
- 'Tester, Test'
- test@example.com
-
- c
- c@c.com
-
- d
- d@d.com
my $str = 'abc@xyz;qwe@rty;';
my @addrs = ($str =~ m/(\w+\@[\w\.]+)/g);
print join("<->", @addrs);