Optimal Solution
Your regexp_matches()
pattern can only result in a single element per pattern evaluation, so all resulting rows are constrained to exactly one array element. The expression simplifies to:
SELECT x[1]
FROM regexp_matches('i1 into o2, and g1 into o17', '[gio][0-9]{1,}', 'g') AS x;
Other Solutions
SELECT unnest(x) -- also works for cases with multiple elements per result row
SELECT trim(x::text, '{}') -- corner cases with results containing `{}`
SELECT rtrim(ltrim(x::text, '{'), '}') AS x1 -- fewer corner cases
If the pattern can or shall not match more than one time per input value, also drop the optional parameter 'g'
.
And if the function shall always return exactly one row, consider the subtly different variant regexp_match()
introduced with Postgres 10.
In Postgres 10 or later it's also prudent to suggest the set-returning function (SRF) regexp_matches()
in the SELECT
list directly (like Rick provided) since behavior of multiple SRFs in the SELECT
list has finally been sanitized: