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 <polobo@xxxxxxxxx>
On 13 December 2011 14:04, InterRob <rob.marjot@xxxxxxxxx> 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 :)regardsIf 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.