2016-11-30 77 views
0

我很困惑與正則表達式的功能:這段代碼表達式的功能是什麼?

/\[\]$/

我嘗試了很短的Perl代碼去了解它,但我仍然感到困惑。該代碼輸出是Else

my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}]}; 
if($addr2 =~ /\[\]$/) { 
    print "If\n"; 
} 
else { 
    print "Else\n"; 
} 

我認爲/\[\]$/將指向的值是否是一個數組或沒有,但似乎並不是這種情況。然後我想,也許這個值必須以一個數組結束,因爲正則表達式中有一個$。所以,我想代:

my $addr2 = {[{'firstname' => 'Nikhil', 'lastname' => 'Hegde'}, {'firstname' => 'Nikhil2', 'lastname' => 'Hegde2'}],[]};

但這並不工作。代碼輸出仍爲Else

任何人都可以幫助我理解表達/\[\]$/?它做什麼常規匹配?謝謝!

+0

與字符串'[]'(括號對)匹配的字符串末尾。所以它匹配字符串'「hello []」',但不匹配'「hello」'。不用轉義括號就是_character class_。另外,可能需要一個基本的事實:正則表達式處理一個字符串 - 可能在一個變量中,但是你在一個_complex數據結構上嘗試過它。 – zdim

+0

超時...繼續 - 您的$ addr2打印爲HASH(...) - 並且該字符串的末尾沒有[]。 – zdim

+0

@zdim謝謝!這解釋了很多 –

回答

7

正則表達式檢查字符串的匹配。你的情況,你嘗試匹配一個哈希引用。這就是爲什麼你的代碼去了else塊。

現在,/\[\]$/。它匹配字符串,該字符串在其結尾處具有文字[]。例如,字符串my $str = "just an example []"將匹配此正則表達式。

+1

請注意,我們可以匹配一個引用 - 'perl -wE'$ ra = [1,2];說$ ra,如果$ ra =〜/ AR /''。這只是一個hashref在末尾沒有'[]':) – zdim

+0

@zdim得說我從來沒有想過這個選擇!你永遠無法知道什麼時候這麼奇怪的事情可能會派上用場 – yonyon100

+0

'$ addr2'的data dumper輸出可能會澄清發生了什麼? – Sobrique