我有perl正則表達式匹配網絡腳本的問題,我已經設法將行爲放在一個小的片段中。爲什麼我的正則表達式匹配版本號不起作用?
取本Perl的片斷爲Perl 5.10.0 Debian中:
#!/usr/bin/perl
use warnings;
use strict;
my $line = "Version: 0\r\n";
my($version) = $line =~ m/^Version:(\s\d+)\r\n$/;
print "1st failed \n" if not $version;
($version) = $line =~ m/^Version:\s(\d+)\r\n$/;
print "2nd failed \n" if not $version;
($version) = $line =~ m/^Version:\ (\d+)\r\n$/;
print "3th failed \n" if not $version;
有了這個輸出:
2nd failed
3th failed
顯然第一和第二之間的唯一差別是移動的空間出來的提取的模式,它理論上根本不應修改正則表達式,只是返回的部分。
我不明白爲什麼第二和第三不會像第一個那樣工作。
編輯: 如果您刪除$版本中的圓括號不是相同的腳本,您沒有得到匹配的結果,您得到操作的布爾結果,以獲得匹配的結果,你需要接收它一元(只有一個匹配的字符串)元組。
你肯定是對的,這不會發生在「版本:1」,匹配的模式是字符串「0」,其布爾結果爲假。我以前怎麼沒注意到? :| – 2009-09-05 11:27:05
你可能沒有注意到,因爲第一場比賽還有'0'。不同的是,第一個匹配捕獲了[] 0',並且空白空間的存在導致*那個*字符串被評估爲真。這就是爲什麼我至少沒有馬上看到它的原因。 – Telemachus 2009-09-05 13:27:07
「'print」failed \ n「除非($ version)= $ line =〜〜''」也可能工作 – 2009-09-08 02:01:57