perl regex:如何逃避反斜杠字符

时间:2015-01-09 10:03:33

标签: regex perl

在下面的脚本中,我使用存储在变量中的替换模式。 我似乎无法在最终结果中得到一个反斜杠。我得到一两个。 它与eval语句有关 任何人都可以告诉我这方面的见解。

test.pl:

use Data::Dumper;

@arr = ("a", "b", "c");
$re = '$1 \|';
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr;
print Dumper(\@arr);

@arr = ("a", "b", "c");
$re = '$1 \\|';
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr;
print Dumper(\@arr);

@arr = ("a", "b", "c");
$re = '$1 \\\|';
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr;
print Dumper(\@arr);

$ test.pl

$VAR1 = [
          'a |',
          'b |',
          'c |'
        ];
$VAR1 = [
          'a |',
          'b |',
          'c |'
        ];
$VAR1 = [
          'a \\|',
          'b \\|',
          'c \\|'
        ];

1 个答案:

答案 0 :(得分:5)

Data Dumper以Perl可以解析的方式显示输出。单引号中的两个反斜杠实际上意味着一个反斜杠:

print '\\'; # Output: \

供参考,perlop

  

单引号的文字字符串。反斜杠代表一个              除非后跟分隔符或另一个反斜杠,否则反斜杠              在哪种情况下插入分隔符或反斜杠。