/ / Perl-文字列の最後の桁の後に最後のアルファ文字を返し、変更された文字列も返します-正規表現、perl

Perl - 文字列の最後の数字の後ろにある最後のアルファ文字を返し、修正された文字列も返す - regex、perl

私はこのような文字列を持っています:

$var = "123456d";

またはおそらく

$var = "123456"; # (no alpha char)

それが重要な場合、5以上の6桁まであります。 数字にアルファ、スペース、または特殊な文字を混在させることはできません。

私のPerlスクリプトでは、最後のアルファ文字とアルファ文字のない文字列を削除して返す必要があります。

Dを使用してトリムできると思いますか?チョップ?しかし、両方の変数をすばやく取得する簡単な方法が必要です。

my $numbers =~   s/D+?$var//;  #???

my $alpha = substr($var, 0, -1); ## but no alpha check.

または

my $alpha = chop($var); ## but no alpha check.

a-Zなどの場合、アルファ文字かどうかを確認します。

または私の能力ソリューションの限界:

$alpha = $var;
$alpha =~ s/[0-9]//ig;
$var =~ s/[a-Z]//ig;
$numbers = $var;

結果:

($numbers == "123456")
($alpha eq "d") (or "" if nothing)

ここで質問するのは簡単すぎると思いますが、適切な解決策を見つけることも書くこともできません。

私の=〜sの使用は推測に過ぎませんが、より良い方法、または1つのライナーが必要です。

ここにすべての助けをありがとう...

ごめんなさい!数字の後に2つのアルファ文字がある場合があります!それらは、単一の変数として一緒に返される必要があります($ alpha eq "dd")

私もこれを見つけました:

$var =~ s{^([0-9]+).*}{$1}i;

回答:

回答№1は6

使用 pL 数字のキャプチャを回避し、文字列をオプションにすることで、文字が終わらない数字でも一致するようにします。

my $var = "123456d";
my ($num, $letter) = $var =~ /^(d+)(pL)?$/;

使用できないことに注意してください w 数字も含まれているため、可能な終了文字をキャプチャします。 tchristが指摘したように、 p{alpha} 使用することもできます。


回答№2の場合は0

多分このような何か:

my $numbers =~ s/(d+)(p{alpha}+)?/$1/;

my $alpha = $2;

$1 最初の括弧のキャプチャを指し、 $2 秒を指します。

編集済み:使用済み d 数字の場合、 p{alpha} アルファ用。