> "Rui Martins" <[EMAIL PROTECTED]> writes: >> Even though this can me though as argumentative, think about this >> expression: > >> (something)? > >> Will "match" with an empty string in the context of a full expression, >> and >> will return an EMPTY String. So by analogy, I would expect it, to return >> the same as a sub-expression when it actually has a "match" even if with >> an empty sub-string. > > Uh, no, it *won't* match if there is not "something" in the string. > > The behavior you are looking for is properly obtained this way: > > ((something)?) > > This will return either "something" or an empty string (assuming > we have a globally successful match). The point is there's a difference > between what X matches (or doesn't) and what X? matches. > > regards, tom lane
OK, what I'm trying to explain is maybe a difference of assumptions: SELECT '' ~ '^(something)?$' NOW: True ME: True YOU: True SELECT SUBSTRING( '', '^(something)?$' ) NOW: '' => EMPTY String (OK, by pure luck. It's returning FULL match) ME: '' => EMPTY String YOU: NULL SELECT 'TEST' ~ '^TEST(something)?$' NOW: True ME: True YOU: True SELECT SUBSTRING( 'TEST', '^TEST(something)?$' ) NOW: 'TEST' => WRONG !!! (It's returning FULL Match) ME: '' => EMPTY String YOU: NULL My reasoning is: Why would the exact same sub-expression, return different results when either preceded or followed by something. In my opinion, the same sub-expression should always return the same result if the same conditions are met (in the sub-expression context). Hope this time it's clear. Best Regards Rui Martins -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs