perl - regex帮助匹配单个字符串中的多个值

时间:2010-12-10 04:22:11

标签: regex perl

我看到的大多数正则表达式示例都匹配$line=~ m/dog/,但是一旦找到匹配项,如何将该值提取为仅存储在变量中?

/home/test/dog/.last_file_sent.yahoo@jedi.ucsb.edu

我想在dog之后匹配/home/test/或任何3个字母的单词,并将其放入变量中。然后在同一个字符串上匹配一个特定的名称,如ucsb,并将其放在另一个变量中,以便我可以打印出来。感谢。

2 个答案:

答案 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";
}