bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNU grep 2.5: case-insensitive backreference bug


From: Troy Bridoux
Subject: GNU grep 2.5: case-insensitive backreference bug
Date: Mon, 22 Jul 2002 07:20:23 -0700

GNU grep 2.5

1) Grep current behavior

Combining case-insensitivity with backreferences generates what looks
like a bug to me:

% echo "AA" | grep -i '\(a\)\1'
% echo "aa" | grep -i '\(a\)\1'
aa
% echo "Aa" | grep -i '\(a\)\1'
% echo "aA" | grep -i '\(a\)\1'
% echo "AA" | grep -i '\(A\)\1'
AA
% echo "aa" | grep -i '\(A\)\1'
% echo "Aa" | grep -i '\(A\)\1'
% echo "aA" | grep -i '\(A\)\1'


2) Grep possible correct behavior #1

If the case-insensitive bit does NOT carry over to the backreference, then
we could have:

% echo "AA" | grep -i '\(a\)\1'
AA
% echo "aa" | grep -i '\(a\)\1'
aa
% echo "Aa" | grep -i '\(a\)\1'
% echo "aA" | grep -i '\(a\)\1'
% echo "AA" | grep -i '\(A\)\1'
AA
% echo "aa" | grep -i '\(A\)\1'
aa
% echo "Aa" | grep -i '\(A\)\1'
% echo "aA" | grep -i '\(A\)\1'


3) Grep possible correct behavior #2; also Perl current behavior

If the case-insensitive bit does carry over to the backreference, then
we could have as with perl:

% echo "AA" | perl -ne 'print if /(a)\1/i'
AA
% echo "aa" | perl -ne 'print if /(a)\1/i'
aa
% echo "Aa" | perl -ne 'print if /(a)\1/i'
Aa
% echo "aA" | perl -ne 'print if /(a)\1/i'
aA
% echo "aA" | perl -ne 'print if /(A)\1/i'
aA
% echo "AA" | perl -ne 'print if /(A)\1/i'
AA
% echo "aa" | perl -ne 'print if /(A)\1/i'
aa
% echo "Aa" | perl -ne 'print if /(A)\1/i'
Aa
% echo "aA" | perl -ne 'print if /(A)\1/i'
aA


For consistency with a popular tool which is becoming the defacto
standard on regular expressions, I would personally prefer the latter
behavior to be adopted.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]