我看到的大多数正则表达式示例都匹配$line=~ m/dog/
,但是一旦找到匹配项,如何将该值提取为仅存储在变量中?
/home/test/dog/.last_file_sent.yahoo@jedi.ucsb.edu
我想在dog
之后匹配/home/test/
或任何3个字母的单词,并将其放入变量中。然后在同一个字符串上匹配一个特定的名称,如ucsb
,并将其放在另一个变量中,以便我可以打印出来。感谢。
答案 0 :(得分:3)
查看File::Basename - 将文件路径解析为目录,文件名和后缀。 例如:
use strict;
use File::Basename;
my $file = '/home/test/dog/.last_file_sent.yahoo@jedi.ucsb.edu';
my($filename, $directories) = fileparse($file);
filename会给你.last_file_sent.yahoo@jedi.ucsb.edu
和
目录将为您提供/home/test/dog/
要提取值或捕获值,您必须在正则表达式周围添加一个圆括号,如
$directories =~ m/(dog)/;
my $extract_value = $1;
有关如何提取匹配字符串部分的更多详细信息,请参阅Extracting matches。
答案 1 :(得分: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";
}