Re: Regexp + spaces PG 9.1

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Patrick B <patrickbakerbr(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Regexp + spaces PG 9.1
Date: 2017-05-31 04:34:00
Message-ID: CAKFQuwaq+8BP3dgos_7_-vK18koxKQ22UjTD3u3uHsn89NS_9A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, May 30, 2017 at 9:17 PM, Patrick B <patrickbakerbr(at)gmail(dot)com> wrote:

>
> regexp_matches(name, '((main|medium).name/\d+.\d+)') as filename,
>
>
> Example here: http://sqlfiddle.com/#!15/5f4f0/4
>
> 1. can only get the jpg file name
>
> ​Because those are the only two file names consisting of one or more
numbers, something else, and ending with one or more numbers

I'm pretty sure you mean for the "." in that regex to be "\." so it is
treated as the period before the extension and not the regex "any" meta
character.

\d means number, 1-9. You probably want something like "[\d\w\s]+" to
match digits, letters (including underscore), and white-space. Or maybe
"[^\r\n/\.]+" - specify what it is that won't be in the file name.

>
> 1. I don't get only the file name but the rest as well, which is not
> what I need
>
> ​You get more than just "the rest"...you get an array with two entries
corresponding to the two parenthetical captures (the fiddle apparently
doesn't display the "{}" that would make this much more obvious).

(regexp_matches​(...))[#]

The above will let you extract only the array position that you specify.
You will need to add more parens to delimit exactly what you need.

You can use "(?:regex)" instead of normal parens to group without capturing.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Patrick B 2017-05-31 06:19:52 Re: Regexp + spaces PG 9.1
Previous Message Patrick B 2017-05-31 04:17:03 Regexp + spaces PG 9.1