8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在 Perl 字符串中手动插入字符串转义?

Jonald Penpillo 2月前

33 0

在 perl 中,假设我有一个字符串,如 'hello\tworld\n',而我想要的是:'hello world' 也就是说,\'hello\',然后是文字制表符,然后是 \'world\',然后是文字换行符。或者等效地,\'...

在 perl 中假设我有一个像这样的字符串 'hello\tworld\n' ,我想要的是:

'hello  world
'

也就是说,\'hello\',然后是文字制表符,然后是 \'world\',然后是文字换行符。或者等效地, "hello\tworld\n" (请注意双引号)。

换句话说,是否有一个函数可以获取带有转义序列的字符串并返回插入所有转义序列的等效字符串?我不想插入变量或其他任何东西,只想插入转义序列,例如 \x ,其中 x 是一个字母。

帖子版权声明 1、本帖标题:如何在 Perl 字符串中手动插入字符串转义?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Jonald Penpillo在本站《perl》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 解决的 问题 。我从未使用过该模块,但它看起来很有用:

    use String::Escape qw(unbackslash);
    my $s = unbackslash('hello\tworld\n');
    
  • 非常感谢。我找到了 String::Interpolate,但它的作用完全不同。

  • 此外,对于在 Ubuntu 9.10 中使用它的人来说,String::Escape 版本没有 unbackslash。相反,它具有 unprintable。

  • 您可以使用“eval”来完成:

    my $string = 'hello\tworld\n';
    my $decoded_string = eval "\"$string\"";
    

    请注意,如果您不能 100% 控制输入字符串,则该方法可能会存在安全问题。

    编辑:如果您只想插入 \x 替换(而不是一般情况‘Perl 会在引号字符串中插入的任何内容’),您可以这样做:

    my $string = 'hello\tworld\n';
    $string =~ s#([^\\A-Za-z_0-9])#\\$1#gs;
    my $decoded_string = eval "\"$string\"";
    

    这与 quotemeta 的作用几乎相同 - 但免除了 '\' 字符的转义。

    编辑2:这仍然不是 100% 安全的,因为如果最后一个字符是 '\' - 它将会“泄漏”到字符串的末尾......

    就我个人而言,如果我想要 100% 安全,我会对我特别想要的子项进行哈希处理,并使用正则表达式替换而不是 eval:

    my %sub_strings = (
        '\n' => "\n",
        '\t' => "\t",
        '\r' => "\r",
    );
    
    $string =~ s/(\\n|\\t|\\n)/$sub_strings{$1}/gs;
    
  • ammy 2月前 0 只看Ta
    引用 6

    我可以结合使用 eval 和 quotemeta 来安全地执行此操作吗?基本上,(my $interpolated_string = eval(q(\') . quotemeta($string) . q(\'))) =~ s/\\(.)/\1/g.

返回
作者最近主题: