【发布时间】:2023-04-09 01:50:01
【问题描述】:
我正在阅读 Jeffrey Friedl 的《Mastering Regular Expressions 3rd Ed》一书。在第 274 页,Jeffrey 要求他的读者调查为什么正则表达式 /x([^/]|[^x]/)*x/ 匹配字符串(匹配的字符以粗体标记)“years =天 /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";
}
【问题讨论】:
标签: regex