Re: Non-capturing expressions

Поиск
Список
Период
Сортировка
От Thom Brown
Тема Re: Non-capturing expressions
Дата
Msg-id CAA-aLv60OPWQzQY3bF3bDbFYuLCTzSwaWObxuKNJxqq9+19X9Q@mail.gmail.com
обсуждение исходный текст
Ответ на Non-capturing expressions  (Thom Brown <thom@linux.com>)
Ответы Re: Non-capturing expressions  (Francisco Olarte <folarte@peoplecall.com>)
Список pgsql-general
On 25 October 2014 11:49, Francisco Olarte <folarte@peoplecall.com> wrote:
Hi Thom:

On Sat, Oct 25, 2014 at 11:24 AM, Thom Brown <thom@linux.com> 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

В списке pgsql-general по дате отправления:

Предыдущее
От: Francisco Olarte
Дата:
Сообщение: Re: Emulating flexible regex replace
Следующее
От: Oliver Kohll - Mailing Lists
Дата:
Сообщение: Re: dblink password required