Re: regex help wanted
От | matt@byrney.com |
---|---|
Тема | Re: regex help wanted |
Дата | |
Msg-id | bae5a6ebce3e67ef0fd79a3d3c880727.squirrel@mail.byrney.com обсуждение исходный текст |
Ответ на | Re: regex help wanted (Jasen Betts <jasen@xnet.co.nz>) |
Список | pgsql-general |
> On 2013-04-25, Karsten Hilbert <Karsten.Hilbert@gmx.net> wrote: >> On Thu, Apr 25, 2013 at 10:32:26AM -0400, Tom Lane wrote: >> >>> Karsten Hilbert <Karsten.Hilbert@gmx.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 ? Greediness and non-greediness of operators are like hints - they are only honoured if there is a choice in the matter. In your case, if the <[^<]+?: stopped at the first ":", it would be impossible to match the rest of the pattern.
В списке pgsql-general по дате отправления: