2017-02-28 86 views
-1

這是perl腳本:

while ($line = <>) 
{ 
     if ($line =~ m/^ *$/) 
     { 
       $line = "--blank\n"; 
     } 
     print($line); 
} 

用於替換文件中的所有空行與--blank\n

我不明白爲什麼它工作。爲什麼這個正則表達式m/^ *$/匹配空行?因爲在行尾有換行符,所以不能匹配。

UPDATE:

我認爲:^是行的開頭,*儘可能沒有或儘可能多的空間,線$結束。

空行必須是這樣的:[ ][ ][ ]\n這是^然後[ ]*然後\n$

它們爲什麼匹配?

+0

可能的重複[參考 - 這是什麼正則表達式?](http://stackoverflow.com/questions/22937618/reference-what-does-this-regex-mean) – Tushar

+0

'^':開始行, '*'表示任意數量的空格,'$':行尾。 – Tushar

+0

據我所知,'$'與任何字符都不匹配,不包括'\ n'。還是呢? – nikartix

回答

4

$匹配字符串的末尾或字符串末尾的換行符之前。

+0

謝謝澄清的事情。他們說,這只是「行尾」,我錯了。 – nikartix

+0

總是值得閱讀官方文檔:) – ysth

+2

@nikachx,小心你讀的文檔。有很多正則表達式引擎,它們都有不同之處。例如,'$'確實是字符串在其他一些引擎中的結尾。在Perl中,這是'\ z'。在Perl中,'$'相當於'(?= \ n \ z | \ z)'(不含'm'修飾符)或'(?= \ n | \ z)'(帶'm'修飾符) 。 – ikegami