如果我有
$ string = 0000111111110101;
如何将其分为两部分
$ s1 = 0000;和$ s2 = 11111111; $ s3 = 0101;
即,我想要第一个4位,最后一个4位,以及剩下的中间位。 如果三个需要部件的长度是用户指示的参数怎么办?
分裂中是否有任何方法可以这样做? 如果我使用正则表达式完成它,会是什么样的?
答案 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+)(.*)$
3个匹配组:
1 Group: 0000
2 Group: 11111111
3 Group: 0101
尝试这个
^([^1]*)([^0]*)(.*)$
让它更精确
^([^1]0*)([^0]1*)(\d+)$