3

こんにちは、Perl プログラミングの初心者です。正規表現を使用してスカラー変数から最初の数値を格納するコードを書きましたが、最後の行から最初の数値を取得していますが、最初の行から数値が必要です。

たとえば、次のコードでは必要です$num = 22が、コードは を返します656

my $num ;

my $sample = "fd 22 sdf sdf 96 
dsf6 66s sd6 7777 sd
656 dd 55  ";

my @sentences = split(/\n/, $sample);


for my $line(@sentences)
{
    ($num )= $line =~ /([0-9]+) .*/ ;

    }
print $num;

誰かが私の論理のどこが悪いのか教えてもらえますか?

4

3 に答える 3

5

あなたのコードは、ループの次の繰り返しで最初の一致を上書きします。22 の一致がありますが、666 がそれを置き換えます。最初のマッチの後にブレークするだけです:

($num )= $line =~ /([0-9]+) .*/ and last;

またはループを削除して、次のものと照合しますsample

($num )= $sample =~ /([0-9]+)/;
于 2013-07-08T22:17:20.197 に答える
0

または試してみてください

 ($num) = $sample =~ /[0-9]+/g
于 2013-07-08T22:41:38.123 に答える