【问题标题】:perl regex: how to escape backslash characterperl 正则表达式:如何转义反斜杠字符
【发布时间】:2015-01-09 10:03:33
【问题描述】:

在下面的脚本中,我使用了存储在变量中的替换模式。 我似乎无法在我的最终结果中得到一个反斜杠。我得到一个或两个。 它与 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 \\|'
        ];

【问题讨论】:

    标签: regex perl


    【解决方案1】:

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

    print '\\'; # Output: \
    

    供参考,perlop

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

    【讨论】:

    • 确实如此。非常感谢。
    猜你喜欢
    • 2017-05-06
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2015-07-14
    • 2011-04-30
    相关资源
    最近更新 更多