Re: regex help wanted

From: Jasen Betts <jasen(at)xnet(dot)co(dot)nz>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: regex help wanted
Date: 2013-04-28 04:49:30
Message-ID: kli9oq$odq$1@gonzo.reversiblemaps.ath.cx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 2013-04-25, Karsten Hilbert <Karsten(dot)Hilbert(at)gmx(dot)net> wrote:
> On Thu, Apr 25, 2013 at 10:32:26AM -0400, Tom Lane wrote:
>
>> Karsten Hilbert <Karsten(dot)Hilbert(at)gmx(dot)net> writes:
>> > What I don't understand is: Why does the following return a
>> > substring ?
>>
>> > select substring ('junk $<allergy::test::99>$ junk' from '\$<[^<]+?::[^:]+?>\$');
>>
>> There's a perfectly valid match in which [^<]+? matches allergy::test
>> and [^:]+? matches 99.
>
> Tom, thanks for helping !
>
> I would have thought "<[^<]+?:" should mean:
>
> match a "<"
> followed by 1-n characters as long as they are not "<"
> until the VERY NEXT ":"

if you want that say: "<[^<:]+:"

> The "?" should make the "+" after "[^<]" non-greedy and thus
> stop at the first occurrence of ":", right ? Or am I
> misunderstanding that part ?

From "the fine manual"

Non-greedy quantifiers (available in AREs only) match the same
possibilities as their corresponding normal (greedy) counterparts, but
prefer the smallest number rather than the largest number of matches.
See Section 9.7.3.5 for more detail.

--
⚂⚃ 100% natural

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Bob Futrelle 2013-04-28 05:04:48 pgAdmin shows two servers with the identical data
Previous Message Jasen Betts 2013-04-28 04:16:54 Re: Optimizing bulk update performance