2010-12-10 23 views
1

大多數我看到的正則表達式匹配$line=~ m/dog/,但是一旦找到匹配項,我該如何提取該值才存儲在變量中?perl - 正則表達式幫助匹配單個字符串中的多個值

/home/test/dog/[email protected] 

我想/home/test/後匹配dog或任何3個字母的單詞,並把在一個變量。然後在同一個字符串上匹配一個特定的名稱,如ucsb,並將其放在另一個變量中,以便我可以將它們打印出來。謝謝。

回答

2

使用兩對捕捉括號。

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

謝謝。這很好。 – jdamae 2010-12-10 05:54:37

3

看看File::Basename - 將文件路徑解析爲目錄,文件名和後綴。 例如:

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

文件名會給你[email protected]和 目錄會給你/home/test/dog/

要提取值或捕捉的值,你必須把圓形支架在你的正則表達式像

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

請參閱Extracting matches瞭解如何提取匹配字符串部分的更多細節。

+0

這也是一個很好的答案。感謝您的幫助和鏈接到文檔。 – jdamae 2010-12-10 05:55:30

相關問題