2015-04-03 135 views
-1

你能告訴我,爲什麼這樣的:Perl的正則表達式不工作

($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 2015-04-03 01:51:18

+0

可能 - 我想放棄日期的第二部分(時間和偏移量等)和最後的「行」以獲得數字。 – 2015-04-03 16:55:41

回答

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 2015-04-03 01:43:46

+1

@Barmar當然不是。如果他使用過'=',那麼是的。 – TLP 2015-04-03 01:50:25

+0

但是我沒有找到任何'$ _' .. – 2015-04-03 01:51:32