2017-02-28 1289 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