我正在阅读 Jeffrey Friedl 的《Mastering Regular Expressions 3rd Ed》一书。在第 274 页,Jeffrey 要求他的读者调查为什么正则表达式/x([^/]|[^x]/)*x/匹配字符串(匹配的字符以粗体标记)“years = days /x 除 x// 365; /x 假设为非闰年 x/ "。
我从正则表达式中删除了结尾的x/。所以正则表达式/x([^/]|[^x]/)*的输出是"/x 除 x//365; "。但是在我添加x/后,正则表达式/x([^/]|[^x]/)*x/的输出是“/x 除 x//365;/x 假设非闰年 x/” .
谁能告诉我 Perl 的正则表达式引擎对结尾x/的回溯步骤?
这是我针对这个问题的 perl 脚本。
my $str = "years = days /x divide x//365; /x assume non-leap year x/";
if ($str =~ m{(/x([^/]|[^x]/)*)}) {
print "\$1: '$1'\n"; # output: $1: '/x divide x//365; '
} else {
print "not matched.\n";
}
$str = "years = days /x divide x//365; /x assume non-leap year x/";
if ($str =~ m{(/x([^/]|[^x]/)*x/)}) {
print "\$1: '$1'\n"; # output: $1: '/x divide x//365; /x assume non-leap year x/'
} else {
print "not matched.\n";
}