Re: BUG #4044: Incorrect RegExp substring Output
От | Rui Martins |
---|---|
Тема | Re: BUG #4044: Incorrect RegExp substring Output |
Дата | |
Msg-id | 2021.B1UHWUVdEF8=.1206014234.squirrel@www.pdmfc.com обсуждение исходный текст |
Ответ на | Re: BUG #4044: Incorrect RegExp substring Output (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: BUG #4044: Incorrect RegExp substring Output
|
Список | pgsql-bugs |
> "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
В списке pgsql-bugs по дате отправления: