On Tue, Jun 10, 2008 at 07:41:53AM -0600, Michael Fuhr wrote: > On Tue, Jun 10, 2008 at 02:59:53PM +0200, Leif B. Kristensen wrote: > > So far, so good. But look here: > > > > pgslekt=> select link_expand('[p=123|John Smith] and [p=456|Jane Doe]'); > > link_expand > > ----------------------------------------------------------------------- > > <a href="./family.php?person=123">John Smith] and [p=456|Jane Doe</a> > > (1 row) > > > > Hey, I told it not to be greedy, didn't I? > > Yes, but regexp_replace only replaces that part of the original > string that matches the regular expression -- the rest it leaves > alone. Sorry, this isn't quite right. As you already discovered, the pattern was being more greedy than you wanted. That's one reason why I often use an inverted class instead of assuming that a non-greedy quantifier will grab only what I want. select regexp_replace( '[p=123|John Smith] and [p=456|Jane Doe]', E'\\[p=(\\d+)\\|([^]]+)\\]', E'<a href="./family.php?person=\\1">\\2</a>', 'g' ); regexp_replace ----------------------------------------------------------------------------------------------------- <a href="./family.php?person=123">John Smith</a> and <a href="./family.php?person=456">Jane Doe</a> -- Michael Fuhr