Regexp named capture groups

From: Joel Jacobson <joel(at)trustly(dot)com>
To: Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Regexp named capture groups
Date: 2018-02-03 10:19:26
Message-ID: CAASwCXeM62AVRCV1OBpG80vyR3rtN4WtjcWFL3FZwitNjmrjFg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi hackers,

Is anyone working on this feature[1] also for PostgreSQL's regex engine?

I'm thinking it could work something like this:

joel=# \df regexp_match
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------------+------------------+---------------------+--------
pg_catalog | regexp_match | jsonb | text, text | normal
pg_catalog | regexp_match | jsonb | text, text, text | normal
(2 rows)

joel=#* SELECT regexp_match_named(
joel(#* '2018-12-31',
joel(#* '(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})'
joel(#* );
regexp_match_named
----------------------------------------------
{"day": "31", "year": "2018", "month": "12"}
(1 row)

I think this feature would be awesome, for the reasons mentioned in [1], quote:

"Referring to capture groups via numbers has several disadvantages:
1. Finding the number of a capture group is a hassle: you have to
count parentheses.
2. You need to see the regular expression if you want to understand
what the groups are for.
3. If you change the order of the capture groups, you also have to
change the matching code."

[1] http://2ality.com/2017/05/regexp-named-capture-groups.html

Best regards,

Joel Jacobson

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tomas Vondra 2018-02-03 12:05:10 Re: JIT compiling with LLVM v9.0
Previous Message Andres Freund 2018-02-03 09:23:14 Re: JIT compiling with LLVM v9.1