Re: [PATCHES] regexp_replace - Mailing list pgsql-hackers

From David Fetter
Subject Re: [PATCHES] regexp_replace
Date
Msg-id 20050607005912.GB5196@fetter.org
Whole thread Raw
In response to Re: [PATCHES] regexp_replace  (a_ogawa <a_ogawa@hi-ho.ne.jp>)
Responses Re: [PATCHES] regexp_replace  (Atsushi Ogawa <a_ogawa@hi-ho.ne.jp>)
List pgsql-hackers
On Tue, Jun 07, 2005 at 09:35:56AM +0900, a_ogawa wrote:
>
> Bruce Momjian wrote:
> > David Fetter wrote:
> > > On Mon, Jun 06, 2005 at 12:02:18PM -0400, Bruce Momjian wrote:
> > > >
> > > > Patch removed because we already have this functionality.
> > >
> > > We don't yet have this functionality, as the patch allows for
> > > using second and later regex matches "()" in the replacement
> > > pattern.
> > >
> > > The function is misnamed.  It should be called
> > > regex_replace_all() or some such, as it violates the principle
> > > of least astonishment by replacing all instances by default.
> > > Every other regex replacement defaults to "replace first," not
> > > "replace all."  Or maybe it should take a bool for "replace
> > > all," or...?  Anyhow, it's worth a discussion :)
> >
> > Does anyone want to argue that this additional functionality is
> > significant and deserves its own function or an additional
> > argument to the existing function?
>
> Oracle10g has a similar functionality. The name is regexp_replace.
> There is the following usages in this functionality.
> - Format the ZIP code and the telephone number, etc.
>    Example: select regexp_replace('1112223333', '(\\d{3})(\\d{3})(\\d{4})',
>                                   '(\\1) \\2-\\3');
>             result: (111) 222-3333
> - Delete an unnecessary white space.
>    Example: select regexp_replace('A     B     C', '\\s+', ' ');
>             result: A B C
>
> I think that the usage increases if "replace all" or "replace first" can be
> specified to this function.

Ogawa-san,

I think that this would be a case for function overloading:

function regexp_replace(
    string text, pattern text, replacement text
) RETURNS TEXT; /* First only */

regexp_replace(
    string text, pattern text, replacement text, global bool
) RETURNS TEXT; /* Global if global is TRUE, first only otherwise */

What do you think of this idea?  One trouble is that there are some
other options.  For example, one could add switches for all
combinations of "global," "case insensitive," "compile once," "exclude
whitespace," etc. as perl does.  Do we want to go this route?

Cheers,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100   mobile: +1 415 235 3778

Remember to vote!

pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: adding new pages bulky way
Next
From: "John Hansen"
Date:
Subject: Re: unicode upper/lower functions