2010-12-10 7 views
1

Die meisten der Regex Beispiele für: Ich bin Mit ist ein Spiel $line=~ m/dog/, aber sobald ich eine Übereinstimmung finden, wie entpacke ich diesen Wert nur in einer Variablen zu speichern?perl - regex Hilfe mulitple Werte in Einzelsaite

/home/test/dog/[email protected] 

Ich möchte nach /home/test/dog oder einen 3-Buchstaben-Wort übereinstimmen und setzte sich in einer Variablen. Dann auf der gleichen Zeichenfolge einen bestimmten Namen wie ucsb und Platzieren Sie das in einer anderen Variablen, damit ich sie ausdrucken kann. Vielen Dank.

Antwort

2

Verwenden Sie zwei Paare einfangender Klammern.

my $pattern = qr{/home/test/(\w{3}).*[.](\w+)[.]edu}; 

while (my $line = <>) { 
    my ($three_letter_word, $school) = $line=~/$pattern/; 
    print "$three_letter_word | $school\n"; 
} 
+0

danke. das funktioniert gut. – jdamae

3

Werfen Sie einen Blick auf File::Basename - Dateipfade in das Verzeichnis, Dateinamen und Suffix Parse. zum Beispiel:

use strict; 
use File::Basename; 
my $file = '/home/test/dog/[email protected]'; 
my($filename, $directories) = fileparse($file); 

Dateiname Sie geben [email protected] und Verzeichnisse geben Ihnen /home/test/dog/

Wert zu extrahieren oder einen Wert zu erfassen, können Sie wie

eine runde Klammer um Ihre regex zu setzen haben
$directories =~ m/(dog)/; 
my $extract_value = $1; 

Extracting matches siehe für weitere Einzelheiten, wie Teile einer Zeichenkette zu extrahieren, die abgestimmt.

+0

das ist auch eine gute Antwort. Danke für Ihre Hilfe und den Link zu den Dokumenten. – jdamae