-1

私はPerl正規表現を学んでいて、文字列から数字を抽出しようとしています。

my $text = "abc000142gh";

000142つまり、スカラー変数の文字列として抽出したいと思います。

私が試してみました:

my $digits = $text ~= /(+d)/;
my $digits = $text ~= m/(+d)/;
my $digits = $text ~= m/(+d)/g;
my $digits = $text ~= /(+d)/g;

しかし、どれも機能していないようです。ワンライナーでこれを行う方法はありますか?

4

2 に答える 2

6

これは機能します:

my $text = 'abc000142gh';
my ($digits) = $text =~ /(\d+)/;

違い:

  1. 文字列を引用符で囲みます(必須ではありませんが、推奨されます)。
  2. リストコンテキストを適用するための括弧内の$digits。詳細については、 perlopを参照してください。
  3. バインディング演算子は=~、ではなく~=です。
  4. \d数字をd意味し、それ自体を表します。
  5. +(繰り返し)は、前ではなく、繰り返す記号の後に使用されます。
于 2012-09-14T14:45:59.127 に答える
3

コードはコンパイルされません。ここにはいくつかの問題があります。

  • 文字列を引用するのを忘れました

    my $text = 'abc000142gh';
    
  • 正規表現バインディング演算子(=~)が間違った方法で使用されています。

  • のバックスラッシュを忘れた\d
  • そしてその前の数量詞(+

    my $digits = $text =~ /(\d+)/;      
    

今あなたの質問に答えるためにあなたはリストコンテキストを強制する必要があります。一致するとリストが返され$digits、スカラーであるが存在するため、リストはその要素数に変換されます。

(my $digits) = $text =~ /(\d+)/;

正規表現の前にを置くかどうかは関係ありません。これは、任意の式mで暗黙的であるためです。/foo/


これらのものを見てください:

于 2012-09-14T14:46:09.473 に答える