gpt4 book ai didi

regex - 带有花括号内表达式的 Perl 正则表达式无法按预期工作

转载 作者:行者123 更新时间:2023-12-04 19:04:58 25 4
gpt4 key购买 nike

我试图理解为什么 Perl 似乎没有评估用于定义匹配中特定出现次数的花括号内的表达式:

用表达式:

$ perl -e '$a=2;print "abbbc" =~ m/b{$a+1}/ ? "match\n" : "no match\n";'
no match

没有表达:
$ perl -e '$a=3;print "abbbc" =~ m/b{$a}/ ? "match\n" : "no match\n";'
match

我求助于使用单独的变量。我在这里缺少什么?谢谢...第一篇文章!

最佳答案

正则表达式中的变量插值就像字符串中的变量插值。它不会将整个字符串作为表达式进行评估,而只是完成变量所需的评估。尝试这个:

$a = 3;
print "{$a+1}\n";

你会看到你的正则表达式中发生了什么。 $a被替换, +1保留为 +1 .和 /x{1+1}/不等同于 /x{2}/ .

您使用单独变量的方法是我使用的方法。但是还有其他的可能性,比如
$a = 3;
print "{${\($a+1)}}\n";
print "yes\n" if "abbbbc" =~ /ab{${\($a+1)}}c/;
${\(...)}包装器使表达式成为用于插值的单个单元。但它很丑。另一个版本是使用 @{[...]} 将其作为数组来执行。像这样:
$a = 3;
print "yes\n" if "abbbbc" =~ /ab{@{[$a+1]}}c/;

我觉得这两个都比
$a = 3;
$aplus1 = $a + 1;
print "yes\n" if "abbbbc" =~ /ab{$aplus1}c/;

关于regex - 带有花括号内表达式的 Perl 正则表达式无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27567965/

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