2016-12-14 10 views
-2

文字列の文字に対してgrepにperlスクリプトを書こうとしています。すべての文字列は配列に格納されます。配列全体を繰り返して特定の単語が出現するかどうか調べます。単語内の文字のためのperl正規表現

my @array = ("Foo1", "Bar", "Baz", "Foo5", "Foo2", "Bak", "Foo3"); 
foreach my $ var (@array){ 
    if ($var =~ /Foo/){ 
     #Regex to grep for the number which is at the end of string Foo 
    } 
} 

いずれのリードも歓迎されます。助けてくれてありがとう。

************編集***********コメントの

感謝。

if ($var =~ /Foo/){ 
    /.Foo+([A-Z]+)/; 
    print $1, "\n"; 
} 

上記のコードは試したもので、何も印刷しませんでした。

+0

問題が何ですか? –

+0

私たちは一般的にあなたのためのコードを一から書いていません。あなたが試したこととどこに問題があるのか​​を説明してください。 –

+0

ああ、私たちはあなたのコメントを記入してほしい...自分でそれを行って、あなたがやったことを投稿し、それがうまくいかなかった場合、あなたは助けを得るでしょう。 –

答えて

3

バインドなしの照合=~は、使用しない$ _変数と一致します。さらに、Fooの前のドットは、Fooの前に何かがある(改行ではない)場合にのみ、2番目の正規表現が一致することを意味します。 Fooを含むすべての文字列がそれで始まるので、$var =~を指定しても、2番目の正規表現は決して一致しません。

さらに、条件の中で番号を直接照合することができます。

最後に[A-Z]は数字と一致しません。代わりに[0-9]を使用してください。

my @array = qw(Foo1 Bar Baz Foo5 Foo2 Bak Foo3); 
foreach my $var (@array){ 
    if ($var =~ /Foo([0-9]+)/){ 
     print $1, "\n"; 
    } 
} 
+0

返事をありがとう。この正規表現は使えますか? '/ Foo +([A-Za-z_0-9] +)/;'そして、 'print $ 1'を使ってその文字を印刷します。 –

+0

なぜFooの後にプラス?あなたのデータには 'Foooo'も含まれていますか? – choroba

+0

正規表現で私は誤解しました+。今すぐ入手してください。 あなたの正規表現が私の問題を修正しました。助けてくれてありがとう。 もう1つのブロッキング問題は、あなたの正規表現で '+'を説明できますか? –

1

次にあなたが番号を取得するために最初のグループを使用することができます

[^\w]*([0-9]) 

2番目の正規表現のためにこれを試してみてください。

+0

答えをありがとう –

1
my @array = qw(Foo1 Bar Baz Foo5 Foo2 Bak Foo3); 
my @var = map(/Foo(\w+)/) @array; 

print @var ; 
+0

答えをありがとう。 –

関連する問題