我有一个输入变量,比如说$a
。$a
可以是数字或字符串或两者的混合。
我的问题是如何剥离变量以分隔数字和字母字符?
例子;
$a can be 'AB9'
在这里,我应该能够将“AB”存储在一个变量中,将“9”存储在另一个变量中。
我怎样才能做到这一点?
我有一个输入变量,比如说$a
。$a
可以是数字或字符串或两者的混合。
我的问题是如何剥离变量以分隔数字和字母字符?
例子;
$a can be 'AB9'
在这里,我应该能够将“AB”存储在一个变量中,将“9”存储在另一个变量中。
我怎样才能做到这一点?
检查此版本,它适用于变量中的 1 个或多个数字和字母字符。
#!/usr/bin/perl
use strict;
use Data::Dumper;
my $var = '11a';
my (@digits, @alphabetics);
while ($var =~ /([a-zA-Z]+)/g) {
push @alphabetics, $1;
}
while ($var =~ /(\d+)/g) {
push @digits, $1;
}
print Dumper(\@alphabetics);
print Dumper(\@digits);
这是一种非常简短的表达方式:
my ($digits) = $input =~ /(\d+)/;
my ($alpha) = $input =~ /([a-z]+)/i;
say 'digits: ' . ($digits // 'none');
say 'non-digits: ' . ($alpha // 'none');
此处在列表上下文中使用匹配运算符很重要,否则如果匹配成功,它将返回。
如果要获取输入字符串中的所有匹配项,只需将列表上下文中的标量变量更改为正确的数组:
my @digits = $input =~ /(\d+)/g;
my @alpha = $input =~ /([a-z]+)/gi;
say 'digits: ' . join ', ' => @digits;
say 'non-digits: ' . join ', ' => @alpha;
对于my $input = '42AB17C'
,输出为
digits: 42, 17
non-digits: AB, C