-- -- Regular expression tests -- -- Don't want to have to double backslashes in regexes set standard_conforming_strings = on; -- Test simple quantified backrefs select 'bbbbb' ~ '^([bc])\1*$' as t; t --- t (1 row) select 'ccc' ~ '^([bc])\1*$' as t; t --- t (1 row) select 'xxx' ~ '^([bc])\1*$' as f; f --- f (1 row) select 'bbc' ~ '^([bc])\1*$' as f; f --- f (1 row) select 'b' ~ '^([bc])\1*$' as t; t --- t (1 row) -- Test quantified backref within a larger expression select 'abc abc abc' ~ '^(\w+)( \1)+$' as t; t --- t (1 row) select 'abc abd abc' ~ '^(\w+)( \1)+$' as f; f --- f (1 row) select 'abc abc abd' ~ '^(\w+)( \1)+$' as f; f --- f (1 row) select 'abc abc abc' ~ '^(.+)( \1)+$' as t; t --- t (1 row) select 'abc abd abc' ~ '^(.+)( \1)+$' as f; f --- f (1 row) select 'abc abc abd' ~ '^(.+)( \1)+$' as f; f --- f (1 row) -- Test some cases that crashed in 9.2beta1 due to pmatch[] array overrun select substring('asd TO foo' from ' TO (([a-z0-9._]+|"([^"]+|"")+")+)'); substring ----------- foo (1 row) select substring('a' from '((a))+'); substring ----------- a (1 row) select substring('a' from '((a)+)'); substring ----------- a (1 row)