perl:如何从预编译版本中获取原始正则表达式?

标签 perl

简单代码:

use 5.014;
use warnings;

my $re = <DATA>;
chomp $re;
my $re2 = qr/$re/;
say $re2;
__END__
^\w$
结果:
(?^u:^\w$)      #added the (?^u:
是否有任何正确的方法来反编译 $re2 以取回原始正则表达式?
动机:正则表达式是一个配置值,所以需要:
  • 阅读
  • 编译
  • 将其保存到文件中以供以后使用。

  • 但是不能保存编译的正则表达式供以后使用,因为在每次编译中,正则表达式都用 (?^u: 扩展,所以经过几个循环后,我以如下结尾:
    (?^u:(?^u:(?^u:(?^u:(?^u:^\w$)))))
    
    因此问题是:
  • 这里有什么正确的方法,如何保存编译后的版本?
  • 如果没有办法 - 如何反编译,以获得原始版本?
  • 任何的想法?
  • 最佳答案

    虽然我会保留字符串副本以供数据使用,然后在需要使用时编译副本,但您也可以使用 regexp_pattern核心功能re模块返回用于创建已编译正则表达式的模式:

    use re 'regexp_pattern';
    
    print regexp_pattern qr/^\w$/;
    

    打印
    ^\w$
    

    关于perl:如何从预编译版本中获取原始正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330711/

    相关文章:

    windows - 尝试在 Windows 7 上的 Strawberry Perl 上安装 HTTP::Server::Brick

    perl - 警告 : something's wrong when ref $body->param->{aa}

    sql - perl DBI 占位符更新 stmt 问题

    mysql - 找不到 DBI.pm,即使它在路径中

    c - perlapio - PerlIO_findFILE() 有效,但将 errno 设置为 "illegal seek"(ESPIPE 29)

    perl - 为什么先销毁包含的对象?

    perl - 如何在 pod2usage 中指定宽度?

    perl - Attribute::Handler 的使用与要求行为

    perl - 哈希数组

    OSX Lion 升级后 perl ".../config.h, needed by ` Makefile'"不起作用