Search Postgresql Archives

Re: order of (escaped) characters in regex range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <polobo@xxxxxxxxx>
On Dec 13, 2011, at 8:09, Szymon Guz <mabewlun@xxxxxxxxx> wrote:



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 :)

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.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux