在Perl中,如何将字符串拆分为三个部分?

时间:2014-07-10 20:46:02

标签: regex perl

如果我有

$ string = 0000111111110101;

如何将其分为两部分

$ s1 = 0000;和$ s2 = 11111111; $ s3 = 0101;

即,我想要第一个4位,最后一个4位,以及剩下的中间位。 如果三个需要部件的长度是用户指示的参数怎么办?

分裂中是否有任何方法可以这样做? 如果我使用正则表达式完成它,会是什么样的?

3 个答案:

答案 0 :(得分:4)

use feature qw/say/;
my ($s1, $s2, $s3) = unpack "A4A8A4", '0000111111110101';
say for $s1, $s2, $s3;

答案 1 :(得分:3)

只需使用正则表达式或substr

my $string = '0000111111110101';

# Regular expression method
if ($string =~ /(.{4})(.*)(.{4})/s) {
    print "$1, $2, $3\n";
}

# Substr method
my $pre = substr $string, 0, 4, '';
my $post = substr $string, -4, 4, '';

print "$pre, $string, $post";

输出:

0000, 11111111, 0101
0000, 11111111, 0101

答案 2 :(得分:0)

使用分组并使用索引

从匹配的组中获取分组
^([^1]*)(1+)(.*)$

Online demo

3个匹配组:

1 Group: 0000
2 Group: 11111111
3 Group: 0101

尝试这个

^([^1]*)([^0]*)(.*)$

Online demo


让它更精确

^([^1]0*)([^0]1*)(\d+)$

Online demo