と言う入力変数があります$a
。$a
数値または文字列、または両方の組み合わせのいずれかです。
私の質問は、変数を取り除いて数字とアルファベットを区切るにはどうすればよいですか?
例;
$a can be 'AB9'
ここでは、'AB' を 1 つの変数に格納し、'9' を別の変数に格納できるはずです。
どうやってやるの?
と言う入力変数があります$a
。$a
数値または文字列、または両方の組み合わせのいずれかです。
私の質問は、変数を取り除いて数字とアルファベットを区切るにはどうすればよいですか?
例;
$a can be 'AB9'
ここでは、'AB' を 1 つの変数に格納し、'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);
これを非常に短く表現する 1 つの方法を次に示します。
my ($digits) = $input =~ /(\d+)/;
my ($alpha) = $input =~ /([a-z]+)/i;
say 'digits: ' . ($digits // 'none');
say 'non-digits: ' . ($alpha // 'none');
ここでは、リスト コンテキストで match 演算子を使用することが重要です。そうしないと、一致が成功した場合に戻ります。
入力文字列内のすべての出現を取得したい場合は、リスト コンテキスト内のスカラー変数を適切な配列に変更するだけです。
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