2010-12-10 4 views
1

La plupart des exemples regex que je vois correspondent à $line=~ m/dog/, mais une fois que je trouve une correspondance, comment puis-je extraire cette valeur uniquement pour la stocker dans une variable?perl - aide de regex correspondant à des valeurs multiples dans une seule chaîne

/home/test/dog/[email protected] 

Je veux correspondre dog ou un mot de 3 lettres après /home/test/ et le mettre dans une variable. Puis sur la même chaîne correspond un nom spécifique comme ucsb et placez-le dans une autre variable afin que je puisse les imprimer. Merci.

Répondre

2

Utilisez deux paires de parenthèses de capture.

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

merci. cela fonctionne bien. – jdamae

3

Jetez un coup d'œil à File::Basename - Parcourez les chemins du fichier dans le répertoire, le nom de fichier et le suffixe. par exemple:

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

vous donnera [email protected] et répertoires vous donnera /home/test/dog/

Pour extraire une valeur ou saisir une valeur, vous devez mettre un support rond autour de votre regex comme

$directories =~ m/(dog)/; 
my $extract_value = $1; 

voir Extracting matches pour plus de détails sur la façon d'extraire des parties d'une chaîne qui correspondait.

+0

c'est aussi une bonne réponse. merci pour votre aide et le lien vers les docs. – jdamae

Questions connexes