Re: [SQL] regexp_replace behavior
Marcin Krawczyk escribió: Hi list, I'm trying to use regexp_replace to get rid of all occurrences of certain sub strings from my string. What I'm doing is: SELECT regexp_replace('F0301 305-149-101-0 F0302 {x1} 12W47 0635H {tt}{POL23423423}', E'\{.+\}', '', 'g') so get rid of whatever is between { } along with these, but it results in: 'F0301 305-149-101-0 F0302 ' how do I get it to be: 'F0301 305-149-101-0 F0302 12W47 0635H' ?? as I understood the docs, the g flag specifies replacement of each matching substring rather than only the first one The first \{.+\} match starts at the first { and ends at the last }, eating the {s and }s in the middle. So there's only one match and that's what's removed. what am I missing ? You need a non-greedy quantifier. Try SELECT regexp_replace('F0301 305-149-101-0 F0302 {x1} 12W47 0635H {tt}{POL23423423}', E'\{.+?\}', '', 'g') -- Álvaro Herrerahttp://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training Services -- Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-sql
Re: [SQL] regexp_replace behavior
Yes that's exactly what I needed. Thanks a lot. pozdrowienia mk 2012/11/20 Alvaro Herrera alvhe...@2ndquadrant.com Marcin Krawczyk escribió: Hi list, I'm trying to use regexp_replace to get rid of all occurrences of certain sub strings from my string. What I'm doing is: SELECT regexp_replace('F0301 305-149-101-0 F0302 {x1} 12W47 0635H {tt}{POL23423423}', E'\{.+\}', '', 'g') so get rid of whatever is between { } along with these, but it results in: 'F0301 305-149-101-0 F0302 ' how do I get it to be: 'F0301 305-149-101-0 F0302 12W47 0635H' ?? as I understood the docs, the g flag specifies replacement of each matching substring rather than only the first one The first \{.+\} match starts at the first { and ends at the last }, eating the {s and }s in the middle. So there's only one match and that's what's removed. what am I missing ? You need a non-greedy quantifier. Try SELECT regexp_replace('F0301 305-149-101-0 F0302 {x1} 12W47 0635H {tt}{POL23423423}', E'\{.+?\}', '', 'g') -- Álvaro Herrerahttp://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training Services