0
A
回答
1
正则表达式中的变量插值与字符串中的变量插值几乎相同。给定,字符串将是"2 2+1"
。该变量已展开,但字符串中的代码未执行。
围绕这个的一个诀窍是在字符串中使用解引用引用。这使我们可以包含任意表达式,但语法有点麻烦。通常,我们用我们想包含的值创建一个数组引用,然后立即解引用它:@{[$x + 1]}
。这与Ruby的#{...}
插值或Bash $(...)
命令替换类似。
所以正则表达式/$x @{[$x + 1]}/x
会工作。
但在大多数情况下,这将更加清晰进行正则表达式之外的所有计算:
my $x = 2;
my $y = $x + 1;
/$x $y/x;
Perl的正则表达式的语法也有语法,可以动态地生成正则表达式的部分。使用上面的变量插值,插值变量内容,然后编译正则表达式。但高级正则表达式可能会在模式匹配期间更改变量的值。这些延迟的正则表达式可以用(??{ ... })
语法编写。这里:/$x (??{ $x + 1 })/x
。但是,这是一个非常先进且容易出错的正则表达式特性。这也会比普通的正则表达式慢。
1
有an extended pattern,它提供了在匹配运算符m/
或替换运算符s///
的匹配部分中的代码执行。
它的版本替换代码的回报,接着把它当作一种模式是
/(??{ code })/
所以你的情况
$_ = 23;
my $x = 2;
my ($m) = /(2(??{ $x+1 }))/;
say $m;
或
RE_EVAL: {
use re 'eval';
my ($m) = /($x(??{ $x+1 }))/;
say $m;
}
比赛和捕获23
。
这里use re 'eval'明确允许这一点,通常由于安全原因不允许。
这是一个非常复杂的功能,它带有复杂的警告。除了在上述链接中的输入外,还请按照该文本中的链接阅读有关Embedded Code Execution frequency。
请不要使用这个复杂的工具,以方便或代替正确书写的代码。
相关问题
- 1. 正则表达式用Perl
- 2. Perl正则表达式在@
- 3. Perl正则表达式在\
- 4. 正则表达式在Perl
- 5. 如何在Perl中使用正则表达式
- 6. 如何在正则表达式中使用Perl变量?
- 7. 如何在perl中使用正则表达式分割
- 8. 如何在perl中使用zcat和正则表达式?
- 9. 如何使用正则表达式在.htaccess中使用正则表达式mod_rewrite
- 10. 正则表达式替换如何在perl中工作?
- 11. 正则表达式使用Perl
- 12. 使用Perl的URL正则表达式
- 13. Python中的正则表达式操作
- 14. 如何Perl递归正则表达式
- 15. 正则表达式用Perl,如预期
- 16. Perl:正则表达式
- 17. Javascript/Perl正则表达式
- 18. Perl正则表达式
- 19. Perl的正则表达式
- 20. Perl Oneliner正则表达式
- 21. Perl的正则表达式不工作
- 22. 2步正则表达式在Perl中
- 23. 如何在正则表达式中执行此操作?
- 24. 的Perl - 任意操作上的正则表达式
- 25. Perl正则表达式和数据提取/操作
- 26. 如何在正则表达式中使用Java lambda表达式
- 27. 如何在Erlang中使用正则表达式匹配正则表达式?
- 28. 在Perl中使用正则表达式模式生成语法?
- 29. Perl的正则表达式 - 动态正则表达式
- 30. 将Perl正则表达式转换为SQL正则表达式
从你的例子中很难知道为什么你不会在正则表达式之外进行操作 – beasy