Search Postgresql Archives

Re: Non-capturing expressions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 25 October 2014 11:49, Francisco Olarte <folarte@xxxxxxxxxxxxxx> wrote:
Hi Thom:

On Sat, Oct 25, 2014 at 11:24 AM, Thom Brown <thom@xxxxxxxxx> wrote:
It must be that I haven't had enough caffeine today, but I can't figure out why the following _expression_ captures the non-capturing part of the text:
# SELECT regexp_matches('postgres','(?:g)r');
 regexp_matches 
----------------
 {gr}
(1 row)

Section 9.7.3, search for 'If the pattern contains no parenthesized subexpressions, then each row returned is a single-element text array containing the substring matching the whole pattern.'

Ah, I knew I missed something:

# SELECT regexp_matches('postgres','(?:g)(r)');
 regexp_matches 
----------------
 {r}
(1 row)

Although I can see it's redundant in this form.
 

I'm expecting '{r}' in the output as I thought this would use ARE mode by default.

Why r ? Your pattern is exactly the same as 'gr'. NOTHING gets captured. To get that you'll need the opposite 'g(r)' to capture it. By default nothing gets captured, the (?:...) construction is used because (....) does GROUPING and CAPTURING, and sometimes you want grouping WITHOUT capturing.

I'm familiar with regular _expression_ syntax, just famliarising myself with PostgreSQL's syntax flavour.

Thanks

Thom

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux