2015-04-03 4 views
-1

Можете ли вы сказать мне, почему это:Perl Regular Expression не работает

($revID, $who, $date, $nlines) =~ m/(\w+) \| (\w+) \| ([0-9-]*) .*\| ([0-9]*) line/; 

не соответствует этим:

r36043 | cmiuch | 2014-10-01 10:51:01 -0400 (Wed, 01 Oct 2014) | 1 линия

revID, который, дата все вышла как пустая.

+1

Не было бы проще '' split' на | '? – TLP

+0

Возможно - мне захотелось сбросить вторую часть даты (время и смещение и т. Д.) И «линия» в конце, чтобы получить только номер. –

ответ

1

Вам необходимо применить регулярное выражение к переменной, в которой хранится фактический вход. т.е. $var =~ m//;

my $var = "r36043 | cmiuch | 2014-10-01 10:51:01 -0400 (Wed, 01 Oct 2014) | 1 line"; 
my ($revID, $who, $date, $nlines) = $var =~ m/(\w+) \| (\w+) \| ([0-9-]+) .*\| ([0-9]+) line/; 
print $revID."\n".$who."\n".$date."\n".$nlines."\n"; 

Выход:

r36043 
cmiuch 
2014-10-01 
1 
+0

То, как он написал, должно работать с '$ _', не так ли? – Barmar

+1

@ Бармар Конечно нет. Если он использовал '=', то да. – TLP

+0

но я не нашел никакого '$ _' .. –

Смежные вопросы