gpt4 book ai didi

regex - 如何使用嵌入式 perl 代码评估正则表达式

转载 作者:行者123 更新时间:2023-12-04 00:43:22 27 4
gpt4 key购买 nike

所以我测试了一个利用实验性嵌入代码功能的正则表达式。我的测试成功了,所以我详细说明了它来做一个更复杂的脚本,但遇到了错误。我将错误追溯到在正则表达式中而不是在嵌入代码中的变量的简单使用。我尝试在建议的 eval 中执行正则表达式,但发现这不起作用,因为在 eval 的正则表达式之后我无法访问特殊变量。我最终重新编写了代码以不使用嵌入式代码策略,但我很好奇为什么它不起作用。我在下面的一对 perl one-liners 中简化了问题:

这有效:

perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
while (/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'

那为什么不呢?:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
$f=10;
$e=41;
while (/(.{$f,$e})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig) {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'

我得到的错误是:
Eval-group not allowed at runtime, use re 'eval' in regex 
m/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ at -e line 1.

有没有办法让它与 $f 一起工作?和 $e变量 - 一种允许我使用特殊变量的方式
$`, $&, $', and @- 

然后?我需要使用 eval 吗?

谢谢,

最佳答案

你需要使用

use re 'eval';

它让 Perl 知道您知道被内插的模式可以评估任意代码,并且您可以接受。它是词法范围的,因此它只会影响文件中或使用它的 curl 中的正则表达式。

由于您有一个单行,您可以使用命令行选项执行相同的操作
-Mre=eval

关于regex - 如何使用嵌入式 perl 代码评估正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320545/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com