Skip site navigation (1) Skip section navigation (2)

Re: BUG #3645: regular expression back references seem broken

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Eric Haszlakiewicz <erh+pgsql(at)swapsimple(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #3645: regular expression back references seem broken
Date: 2008-03-25 00:00:35
Message-ID: 200803250000.m2P00Z109617@momjian.us (view raw or flat)
Thread:
Lists: pgsql-bugs
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:      erh+pgsql(at)swapsimple(dot)com
> 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  <bruce(at)momjian(dot)us>        http://momjian.us
  EnterpriseDB                             http://postgres.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +

In response to

pgsql-bugs by date

Next:From: Bruce MomjianDate: 2008-03-25 00:11:57
Subject: Re: BUG #3692: Conflicting create table statements throw unexpected error
Previous:From: Alvaro HerreraDate: 2008-03-24 23:18:01
Subject: Re: BUG #4055: Using Like in PostgreSQL 8.2.7 and 8.3.1

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group