打印反向引用时,为什么不打印反斜杠?

时间:2014-02-09 14:24:08

标签: regex linux perl

为什么在以下代码段中:

~$ perl -e '  
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c ";  
$var =~ /^\w+=(.*)/;  
print "$1\n";  
'  
array.c builtin.c eval.c field.c gawkmisc.c io.c  main.c  

\未在反向引用中打印。 .显然与字符串文本中的\匹配,因为捕获是直到行尾,所以为什么不打印呢?
为什么我需要在这种情况下逃避它?

2 个答案:

答案 0 :(得分:3)

反斜杠字符很特殊,因为它表示后面的内容不是文字。例如,对于"line 1\nline 2\n"这样的文本,您会看到"\n"的两个实例...反斜杠说下面的内容是特殊含义,而n表示回车。在您的情况下,"\ "没有特殊含义,因此只打印空格。

如果你真的想看到反斜杠,"\\"会这样做。

答案 1 :(得分:2)

"\ "被视为“逃逸空间”。如果您真的想看到\,则需要在字符串中添加\\

如果你仔细观察你的输出,你会看到

io.c  main.c
    ^^

两个空格......

需要进行如此微小的改变:

perl -e '
my $var = "SRC=array.c builtin.c eval.c field.c gawkmisc.c io.c \\ main.c ";  
$var =~ /^\w+=(.*)/;  
print "$1\n";  
'
array.c builtin.c eval.c field.c gawkmisc.c io.c \ main.c