Thread: regexp_replace: LF, CR, or tab

regexp_replace: LF, CR, or tab

From
seiliki@so-net.net.tw
Date:
Hi!

I am trying to replace characters '\r', '\n', or '\t' with space character ' '. As an example, I want string "A\t\n\rB"
becomes"AB".  The following statement seems to be not working. What mistake have I made? 

TIA

CN
========

select regexp_replace(E'A\r\n\tB',E'[\r\n\t]',' ');
 regexp_replace
----------------
 A
         B
(1 row)

Re: regexp_replace: LF, CR, or tab

From
Osvaldo Kussama
Date:
2010/2/27  <seiliki@so-net.net.tw>:
> Hi!
>
> I am trying to replace characters '\r', '\n', or '\t' with space character ' '. As an example, I want string
"A\t\n\rB"becomes "AB".  The following statement seems to be not working. What mistake have I made? 
>
> TIA
>
> CN
> ========
>
> select regexp_replace(E'A\r\n\tB',E'[\r\n\t]',' ');
>  regexp_replace
> ----------------
>  A
>         B
> (1 row)
>


Try:
select regexp_replace(E'A\r\n\tB',E'[\r\n\t]',' ','g');

Osvaldo

Re: regexp_replace: LF, CR, or tab

From
Bastiaan Wakkie
Date:
Just for clarity: In the documentation
(http://www.postgresql.org/docs/8.4/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP)
is mentioned "Flag g causes the function to find each match in the
string, not only the first one, and return a row for each such match. "
So in your example it was only matching \r so A\n\tB was returned

Cheers,

Bastiaan



Osvaldo Kussama wrote:
> 2010/2/27  <seiliki@so-net.net.tw>:
>
>> Hi!
>>
>> I am trying to replace characters '\r', '\n', or '\t' with space character ' '. As an example, I want string
"A\t\n\rB"becomes "AB".  The following statement seems to be not working. What mistake have I made? 
>>
>> TIA
>>
>> CN
>> ========
>>
>> select regexp_replace(E'A\r\n\tB',E'[\r\n\t]',' ');
>>  regexp_replace
>> ----------------
>>  A
>>         B
>> (1 row)
>>
>>
>
>
> Try:
> select regexp_replace(E'A\r\n\tB',E'[\r\n\t]',' ','g');
>
> Osvaldo
>
>