On Sat, Feb 04, 2012 at 09:54:34AM +0100, Szymon Guz wrote: > On 4 February 2012 09:46, hubert depesz lubaczewski <dep...@depesz.com>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 -- The best thing about modern society is how easy it is to avoid contact with it. http://depesz.com/ -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general