[Top][All Lists]
[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.
- GNU grep 2.5: case-insensitive backreference bug,
Troy Bridoux <=