> "Rui Martins" <Rui.Martins@PDMFC.com> 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