3

次のような文字列があります。

$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.

次に、aZ などで、それがアルファ文字かどうかを確認します。

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

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

結果:

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

ここで質問するには些細なことだと思いますが、適用可能な解決策を見つけたり書いたりすることができません。

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

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

考えた後、申し訳ありません!数字の後に 2 文字の英字がある場合があります。それらは、単一の var ($alpha eq 'dd') として一緒に返される必要があります。

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

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

2 に答える 2

0

多分このようなもの:

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

my $alpha = $2;

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

編集済み:\d数字、\p{alpha}アルファに使用されます。

于 2012-05-11T15:39:56.393 に答える