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

jm6*_*666 11 perl

简单代码:

use 5.014;
use warnings;

my $re = <DATA>;
chomp $re;
my $re2 = qr/$re/;
say $re2;
__END__
^\w$
Run Code Online (Sandbox Code Playgroud)

结果:

(?^u:^\w$)      #added the (?^u:
Run Code Online (Sandbox Code Playgroud)

有没有正确的方法来反编译$ re2取回原来的正则表达式?

动机:正则表达式是配置值,因此需要:

  • 阅读
  • 编译它
  • 将其保存到文件中供以后使用.

但是无法保存已编译的正则表达式以供以后使用,因为在每次编译时,正则表达式都扩展了(?^ u:,所以经过几个周期后,我结束时喜欢:

(?^u:(?^u:(?^u:(?^u:(?^u:^\w$)))))
Run Code Online (Sandbox Code Playgroud)

因此问题是:

  • 在这里有任何正确的方法,如何保存编译版本?
  • 如果没有办法 - 如何反编译,获得原始版本?
  • 任何的想法?

Eri*_*rom 15

虽然我只是保留字符串副本以供数据使用,然后在我需要使用它时编译副本,你也可以使用核心模块中的regexp_pattern函数re来返回用于创建编译正则表达式的模式:

use re 'regexp_pattern';

print regexp_pattern qr/^\w$/;
Run Code Online (Sandbox Code Playgroud)

版画

^\w$
Run Code Online (Sandbox Code Playgroud)