如何在Perl中将字符串拆分为两个字符的块?

时间:2008-12-16 19:24:04

标签: regex arrays perl split

如何在Perl中取一个字符串并将其拆分为一个数组,每个字符长两个字符?

我试过这个:

@array = split(/../, $string);

但没有得到预期的结果。

最终我想转变这样的事情

F53CBBA476

到包含

的数组中
F5 3C BB A4 76

4 个答案:

答案 0 :(得分:54)

@array = ( $string =~ m/../g );

模式匹配运算符在Perl的列表上下文中以特殊方式运行。它迭代地处理操作,将模式与上一次匹配后的文本的其余部分进行匹配。然后,列表由在模式匹配的每个应用期间匹配的所有文本形成。

答案 1 :(得分:37)

如果你真的必须使用split,你可以做:

grep {length > 0} split(/(..)/, $string);

但我认为最快的方式是使用unpack

unpack("(A2)*", $string);

这两种方法都具有“优势”,即如果字符串具有奇数个字符,它将自己输出最后一个字符。

答案 2 :(得分:6)

实际上,要捕捉奇数字符,你想让第二个字符成为可选字符:

@array = ( $string =~ m/..?/g );

答案 3 :(得分:5)

传递给split的模式标识了分隔您想要的内容。如果你想使用split,你可以使用像

这样的东西
my @pairs = split /(?(?{ pos() % 2 })(?!))/, $string;

my @pairs = split /(?=(?:.{2})+\z)/s, $string;

那些是相当糟糕的解决方案。更好的解决方案包括:

my @pairs = $string =~ /..?/sg;  # Accepts odd-length strings.

my @pairs = $string =~ /../sg;

my @pairs = unpack '(a2)*', $string;
相关问题