如何用|(管道)作为分隔符拆分字符串

时间:2013-11-18 17:33:27

标签: perl

何时使用拆分|作为分隔符,它不会给我预期的输出。有什么解决方案吗?

use warnings;
my $exclude_list = "1213:sutrust.com,sutrust1.com,sutrust3.com|1321:line.com";
my @exclude_client = split(/|/, $exclude_list);
print "Printing excluse  @exclude_client \n";

输出

Printing excluse  1 2 1 3 : s u n t r u s t . c o m , s u t r u s t 1 . c o m , s u t r u s t 3 . c o m                                              | 1 3 2 1 : l i n e . c o m

预期产出:

印刷排除1213:sutrust.com,sutrust1.com,sutrust3.com 1321:line.com

3 个答案:

答案 0 :(得分:6)

您没有使用|字符作为分隔符,而是使用|正则表达式作为分隔符。该模式总是匹配,因此结果是在每个字符之间分裂。逃离|

split(/\|/, $exclude_list)

答案 1 :(得分:2)

竖线字符是split的特殊字符,需要进行转义。

my @exclude_client = split(/\|/, $exclude_list);

答案 2 :(得分:1)

您需要使用反斜杠转义管道:\|

#!/usr/bin/perl -w
use strict; 

my $exclude_list = "1213:sutrust.com,sutrust1.com,sutrust3.com|1321:line.com";
my @exclude_client = split(/\|/, $exclude_list);

foreach(@exclude_client){
    print "Printing exclude $_ ";
}

输出:

1213:sutrust.com,sutrust1.com,sutrust3.com 1321:line.com