> On 2013-04-25, Karsten Hilbert <Karsten.Hilbert@xxxxxxx> wrote: >> On Thu, Apr 25, 2013 at 10:32:26AM -0400, Tom Lane wrote: >> >>> Karsten Hilbert <Karsten.Hilbert@xxxxxxx> 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. -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general