Search Postgresql Archives

Re: Why this regexp matches?!

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

 



On Feb 4, 2012, at 3:58, hubert depesz lubaczewski <depesz@xxxxxxxxxx> wrote:

> On Sat, Feb 04, 2012 at 09:54:34AM +0100, Szymon Guz wrote:
>> On 4 February 2012 09:46, hubert depesz lubaczewski <depesz@xxxxxxxxxx>wrote:
>> 
>>> select 'depesz depeszx depesz' ~ E'^(.*)( \\1)+$';
>>> 
>>> what's worse:
>>> $ select regexp_replace( 'depesz depeszx depesz', E'^(.*)( \\1)+$', E'\\1'
>>> );
>>> regexp_replace
>>> ────────────────
>>> depesz
>>> (1 row)
>>> 
>>> I know that Pg regexps are limited, but even grep's regexps match this
>>> correctly:
>>> 
>>> =$ printf 'depesz depesz depesz\ndepesz depeszx depesz\n' | grep -E
>>> '^(.*)( \1)+$';
>>> depesz depesz depesz
>>> 
>>> Best regards,
>>> 
>>> depesz
>>> 
>>> 
>> Hi,
>> some time ago I hit the same problem, however the solution was a little bit
>> tricky. I didn't have time to investigate it, but this works:
>> 
>> postgres@postgres:5840=#  select regexp_replace( 'depesz depeszx depesz',
>> E'^(.*)( \\\\1)+$', E'\\\\1' );
>>    regexp_replace
>> -----------------------
>> depesz depeszx depesz
>> (1 row)
> 
> not sure if I understand your point.
> 
> This regexp was meant to find repeated substrings.
> 
> Like this one does in perl:
> 
> /^(.*)( \1)+$/
> 
> We can see how it works with:
> =$ perl -e 'if ( shift =~ m/^(.*)( \1)+$/ ) { print "is repeat of [$1]\n" } else {print "is not repeated\n"}' 'depesz depesz depesz'
> is repeat of [depesz]
> 
> =$ perl -e 'if ( shift =~ m/^(.*)( \1)+$/ ) { print "is repeat of [$1]\n" } else {print "is not repeated\n"}' 'depesz depeszx depesz'
> is not repeated
> 
> reason why your regexp matches is also a mystery for me.
> 
> Best regards,
> 
> depesz
> 
> 

Don't know the answer (if there is one other than 'it's a bug') but as a workaround you can split the string on whitespace then perform grouping and see if more than one record results...

David J.
-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux