Added to TODO: * Fix regular expression bug when using complex back-references
http://archives.postgresql.org/pgsql-bugs/2007-10/msg00000.php --------------------------------------------------------------------------- Eric Haszlakiewicz wrote: > > The following bug has been logged online: > > Bug reference: 3645 > Logged by: Eric Haszlakiewicz > Email address: [EMAIL PROTECTED] > PostgreSQL version: 8.2.5 > Operating system: NetBSD > Description: regular expression back references seem broken > Details: > > I was attempting to create a simple regular expression that uses back > references and I noticed some very odd behaviour. This regexp is supposed > to match a string where all the characters are the same: > > ^(.)\1*$ > > If I try it, it doesn't work. I would expect this to return false: > > template1=# select 'xyz' ~ E'^(.)\\1*$'; > ?column? > ---------- > t > (1 row) > > But adding some extra parens does: > template1=# select 'xyz' ~ E'^(.)(\\1)*$'; > ?column? > ---------- > f > (1 row) > > As does changing the "." to an "x": > > template1=# select 'xyz' ~ E'^(x)\\1*$'; > ?column? > ---------- > f > (1 row) > > As does forcing it to be a extended regular expression: > > > template1=# select 'xyz' ~ E'(?e)^(.)\\1*$'; > ?column? > ---------- > f > (1 row) > > The docs claim: "A single non-zero digit, not followed by another digit, is > always taken as a back reference." (The note at the end of 9.7.3.3) > > It's relatively easy to work around the problem, but it certainly led to a > fair bit of head scratching while trying to debug some code. :) > > ---------------------------(end of broadcast)--------------------------- > TIP 6: explain analyze is your friend -- Bruce Momjian <[EMAIL PROTECTED]> http://momjian.us EnterpriseDB http://postgres.enterprisedb.com + If your life is a hard drive, Christ can be your backup. + -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs