Thanks guys, i see what you mean. I do intend to use the PG escaping, in order to avoid that annoying warning... Hence, my expression should indeed be: SELECT regexp_matches('123-A' , E'(3[A-Z\\-\\(\\) ])');
In the above expression i added the parentheses as I whish to match these as well :)) Thanks! 2011/12/13 David Johnston <pol...@yahoo.com> > On Dec 13, 2011, at 8:09, Szymon Guz <mabew...@gmail.com> wrote: > > > > On 13 December 2011 14:04, InterRob < <rob.mar...@gmail.com> > rob.mar...@gmail.com> wrote: > >> Dear List, >> >> I found this interesting: >> >> SELECT regexp_matches('123-A' , E'(3[A-Z\- ])'); >> ERROR: invalid regular expression: invalid character range >> >> whereas: >> SELECT regexp_matches('123-A' , E'(3[\- A-Z])'); >> regexp_matches >> ---------------- >> {3-} >> (1 row) >> >> Notice the order of (escaped) characters and ranges in the last bit of >> the expression. >> >> Am I missing some key concept of the regular expression? >> >> Regards, >> Rob >> > > Hi Rob, > try '\\-' instead of '\-' > and it works :) > > regards > > > If you don't intend to use PostgreSQL escapes in your string then omit the > leading 'E'. > > In a character class the - symbol has special meaning if it appears > anywhere but the first character of the group. To avoid that special > meaning you have to escape it. If it appears first it always means a > literal -. The PostgreSQL documentation does not fully describe > RegularExpressions but a reference book on them would note this particular > behavior. > > David J. >