Search Postgresql Archives

Re: Regex match not back-referencing in function

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

 



On Feb 12, 2012, at 13:26, Thom Brown <thom@xxxxxxxxx> wrote:

> Hi,
> 
> Could someone explain the following behaviour?
> 
> SELECT regexp_replace(E'Hello & goodbye ',E'([&])','&#' ||
> ascii(E'\\1') || E';\\1');
> 
> This returns:
> 
>     regexp_replace
> ------------------------
> Hello &#92;& goodbye
> (1 row)
> 
> So it matched:
> 
> SELECT chr(92);
> chr
> -----
> \
> (1 row)
> 
> But notice that when I append the value it's supposed to have matched
> to the end of the replacement value, it shows it should be '&'.
> 
> Just to confirm:
> 
> SELECT ascii('&');
> ascii
> -------
>    38
> (1 row)
> 
> So I'd expect the output of the original statement to be:
> 
>     regexp_replace
> ------------------------
> Hello &#38;& goodbye
> (1 row)
> 
> What am I missing?
> 
> -- 
> Thom
> 

The "ASCII" function call is evaluated independently of, and before, the regexp_replace function call and so the E'\\1' has no special meaning.  It only has special meaning inside of the regexp_replace function.

Try just evaluating ascii(E'\\1') by itself and confirm you get "92".

David J.



-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



[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