当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Perl中将字符串拆分为两个字符的块?》经验,为你挑选了4个好方法。

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

我试过这个:

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

但没有得到预期的结果.

最终我想转变这样的事情

F53CBBA476

在包含的数组中

F5 3C BB A4 76

Bill Karwin.. 54

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

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



1> Bill Karwin..:
@array = ( $string =~ m/../g );

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



2> mat..:

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

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

但我认为最快的方法是unpack:

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

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


应该是`a2`,而不是'A2`.前者剥离尾随空格,这最多是多余的.

3> 小智..:

实际上,要捕获奇数字符,您需要使第二个字符可选:

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



4> ikegami..:

该模式传递给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;

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有