私はこのような文字列を持っています:
$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}
アルファ用。