Thread
-
Regular expression not working [^xyz]
Stuart Peters <s.peters@surrey.ac.uk> — 2000-10-02T17:15:03Z
I wasn't aware that Postgres accepted regular expressions (they seem undocumented) until reading the draft of Bruce Momjian's forthcoming book. However, now having looked at them, I have found a bug in matching a particular expression from a PostgreSQL database. I am using: PostgreSQL 7.0.2 on sparc-sun-solaris2.7, compiled by gcc 2.8.1 I have created a very brief table ('bug') that has one 'text' field ('title') and three records: \connect - postgres CREATE TABLE "bug" ( "title" text ); COPY "bug" FROM stdin; abcdefghijklm nopqrstuvwxyz aeiou \. The following queries work as expected, EXCEPT for [2]. I believe that [2] and [3] should return identical results, but [2] simply lists ALL titles: [1] select title from bug where title ~* '[ae]'; Lists titles that contain one of the letters a or e: WORKS [2] select title from bug where title ~* '[^ae]'; Lists ALL titles rather than those that don't contain a or e: DOESN'T WORK (Note: 'select title from bug where title ~* '[^a];' does not work either [3] select title from bug where title !~* '[ae]'; Lists all titles that don't contain a, q, x or z: WORKS [4] select title from bug where title ~* '^[^ae]'; Lists all titles that do not begin with a, q, x or z: WORKS I hope this helps with development, Regards, Stuart Peters ____________________________________________________________________________ Stuart Peters, Dept of Sociology, University of Surrey, Guildford GU2 7XH, United Kingdom. Tel: +44 (0)1483 259292 Fax: +44 (0)1483 259551 Electronic Publishing Resource Service - EPRESS http://www.epress.ac.uk/ -
Re: Regular expression not working [^xyz]
Stephan Szabo <sszabo@megazone23.bigpanda.com> — 2000-10-09T23:43:10Z
On Mon, 2 Oct 2000, Stuart Peters wrote: > \connect - postgres > CREATE TABLE "bug" ( > "title" text > ); > COPY "bug" FROM stdin; > abcdefghijklm > nopqrstuvwxyz > aeiou > \. > > > > The following queries work as expected, EXCEPT for [2]. I believe > that [2] and [3] should return identical results, but [2] simply > lists ALL titles: > > [1] select title from bug where title ~* '[ae]'; > > Lists titles that contain one of the letters a or e: WORKS > > [2] select title from bug where title ~* '[^ae]'; > > Lists ALL titles rather than those that don't contain a or e: > DOESN'T WORK > (Note: 'select title from bug where title ~* '[^a];' does not work either No, that will match any title with at least one character that is not an a or e. It you want a match for all characters not a or e it's ~* '^[^ae]*$' If you were to put into bug a row like a or ae or e, that wouldn't match on 2, but abcde... would match because there exists a character other than a or e.