Perl - регулярное выражение помогает сопоставить несколько значений в одной строке - PullRequest
1 голос
/ 10 декабря 2010

Большинство примеров регулярных выражений, которые я вижу, соответствует $line=~ m/dog/, но как только я найду совпадение, как извлечь это значение только для хранения в переменной?

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

Я хочу сопоставить dog или любое трехбуквенное слово после /home/test/ и поместить его в переменную.Затем в той же строке сопоставьте определенное имя, например ucsb, и поместите его в другую переменную, чтобы я мог их распечатать.Спасибо.

Ответы [ 2 ]

3 голосов
/ 10 декабря 2010

Посмотрите на File :: Basename - Разобрать пути к файлам в каталог, имя файла и суффикс. например:

use strict;
use File::Basename;
my $file = '/home/test/dog/.last_file_sent.yahoo@jedi.ucsb.edu';
my($filename, $directories) = fileparse($file);

имя файла даст вам .last_file_sent.yahoo@jedi.ucsb.edu и каталоги даст вам /home/test/dog/

Чтобы извлечь значение или захватить его, вы должны заключить в регулярное выражение круглую скобку, например

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

см. Извлечение совпадений для более подробной информации о том, как извлечь части строки, которые совпадают.

2 голосов
/ 10 декабря 2010

Используйте две пары круглых скобок.

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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...