2016-12-14 3 views
-2

Ich versuche, ein Perl-Skript für ein Zeichen in einer Zeichenfolge grep zu schreiben. Alle Zeichenfolgen sind in einem Array gespeichert. Wir iterieren über das Array und schauen, ob das bestimmte Wort vorkommt, falls ja, grep für ein bestimmtes Muster.Perl regex für ein Zeichen in einem Wort grep

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 
    } 
} 

Alle Leads sind willkommen. Danke für die Hilfe.

************ Edits ***********

Danke für die Kommentare.

Das obige ist der Code, den ich versuchte, und es hat nichts gedruckt.

+0

Was ist das Problem? –

+0

Wir schreiben im Allgemeinen keinen Code für Sie von Grund auf neu. Erkläre, was du versucht hast und wo du Probleme hast. –

+0

Oh, Sie möchten, dass wir Ihren Kommentar ausfüllen ... Geben Sie es selbst und posten Sie, was Sie getan haben und wie es nicht funktioniert hat, dann werden Sie Hilfe bekommen. –

Antwort

3

Abgleich ohne Bindung =~ passt auf die Variable $ _, die Sie nicht verwenden. Außerdem bedeutet der Punkt vor Foo, dass der zweite Regex nur dann übereinstimmt, wenn Foo etwas vorausgeht (das ist kein Newline). Da alle Strings, die Foo enthalten, damit beginnen, kann der zweite Regex niemals übereinstimmen, selbst wenn Sie $var =~ angeben.

Darüber hinaus können Sie die Nummer direkt in der Bedingung übereinstimmen.

Und schließlich, passt nicht Ziffern. Verwenden Sie stattdessen [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

Danke für die Antwort. Wird diese Regex funktionieren? '/ Foo + ([A-Za-z_0-9] +) /;' und dann 'print $ 1' verwenden, um dieses Zeichen zu drucken. –

+0

Warum das Plus nach Foo? Enthalten Ihre Daten auch 'Foooo'? – choroba

+0

Ich habe mich in meiner Regex falsch verstanden. Hab es jetzt verstanden. Ihre Regex behebt mein Problem. Danke für die Hilfe. Noch eine blockierende Sache, könnten Sie das '+' in Ihrer Regex erklären. –

1

Versuchen Sie dies für Ihre zweite regex

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

Dann können Sie die erste Gruppe verwenden, um die Zahl zu erhalten.

+0

Danke für die Antwort –

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

print @var ; 
+0

Danke für die Antwort. –