On Tue, Jun 10, 2008 at 01:28:06PM +0200, Leif B. Kristensen wrote: > I want to transform the text '[p=1242|John Smith]' to > <a href="./family.php?person=1242">John Smith</a>, but what I get is: > > pgslekt=> select REGEXP_REPLACE('[p=1242|John Smith]', > pgslekt(> E'[p=(\d+)|(.+?)]', > pgslekt(> E'<a href="./family.php?person=\\1">\\2</a>'); > regexp_replace > ------------------------------------------------------ > [<a href="./family.php?person="></a>=1242|John Smith] > (1 row) > > What am I doing wrong? Parts of the regular expression need more escaping. Try this: select regexp_replace( '[p=1242|John Smith]', e'\\[p=(\\d+)\\|(.+?)\\]', e'<a href="./family.php?person=\\1">\\2</a>' ); regexp_replace --------------------------------------------------- <a href="./family.php?person=1242">John Smith</a> Caution: this method doesn't do HTML entity escaping so if your input isn't trustworthy then you could end up with HTML that's different from what you intended. -- Michael Fuhr