如何从 regexp_match 获得第一场比赛?

How do I get the first match from regexp_match?

我想更新一个仅包含电子邮件地址域部分的列。

update
  users
set
  email_base_domain = regexp_match(email, '(\w+\.\w+)$')

不过,regexp_matchreturns一个text[]。如果电子邮件是 example@foo.com,上面的设置 email_base_domain 到 {foo.com}。我想要 foo.com.

如何从 regexp_match 返回的 text[] 中获取第一个元素 text

添加一组括号以对要提取的内容进行分组。例如:

SELECT regexp_matches(email, '(\w+)\.\w+$')
  FROM users

将return{foo},而

SELECT regexp_matches(email, '\w+\.(\w+)$')
  FROM users

将 return '{com}'。

获得文本数组后,您可以使用常规数组索引从 returned 文本数组中提取值。例如:

SELECT (regexp_matches(email, '(\w+)\.\w+$'))[1]
  FROM users

returns 'foo'

SELECT (regexp_matches(email, '\w+\.(\w+)$'))[1]
  FROM users

returns 'com'.

db<>fiddle with other alternatives here