这并不奇怪:
% perl -ne 'print if /c++/' foo
Nested quantifiers in regex; marked by <-- HERE in m/c++ <-- HERE / at -e line 1.
但这有点像:
% grep c++ foo
blah c++ blah
我不知道 grep 正在做什么来适应++
-- 但我希望在 perl 中也一样。或者,至少,有一些优雅的方式来处理这种情况;该模式来自用户,他可能会看到该模式grep c++
有效,然后对 perl 中的失败感到惊讶。
我不想使用quotemeta
; 我的真实代码需要正则表达式模式(来自用户):
while ( my $pattern = shift @pat_list ) {
my $regex = $opts{case} ? qr/$pattern/ : qr/$pattern/i;
my @hits = grep { /$regex/ } @lines;
我想我可以检测到模式有错误然后恢复到quotemeta
. 但我似乎无法eval
用来捕获错误(因为它被视为语法错误?)。