On Tue, Jun 07, 2005 at 10:27:28PM +0900, Atsushi Ogawa wrote: > > David Fetter wrote: > > On Tue, Jun 07, 2005 at 09:35:56AM +0900, a_ogawa wrote: > > > David Fetter wrote: > > > > 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 :) > > > > > > 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? > > My idea is opposite. I think that the regexp_replace() should make > "replace all" a default. Because the replace() of pgsql replaces all > string, and regexp_replace() of oracle10g is also similar.
I respectfully disagree. Although Oracle does things this way, no other regular expression search and replace does. Historically, you can find that "Oracle does it this way" is not a reason why we would do it. Text editors, programming languages, etc., etc. do "replace the first" by default and "replace globally" only when told to. > And I think that it is better to be able to specify the option with text. > I think about this function specification: > > regexp_replace( > string text, pattern text, replacement text > ) RETURNS TEXT; /* Replace all */ > > regexp_replace( > string text, pattern text, replacement text, options text > ) RETURNS TEXT; /* Change operation by the option. */ > > The options can use the following values. > f: Replace first only > i: Case insensitive > > Any comments? I think that "case insensitive" is a good thing to add separately as a boolean :) Cheers, David. -- David Fetter [EMAIL PROTECTED] http://fetter.org/ phone: +1 510 893 6100 mobile: +1 415 235 3778 Remember to vote! ---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq