Search Postgresql Archives

Re: REGEXP_REPLACE woes

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

 



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


[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