如何从 regexp_match 获取第一个匹配项?

问题描述 投票:0回答:2

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

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

但是,

regexp_match
返回
text[]
。如果电子邮件是
[email protected]
,上面将 email_base_domain 设置为
{foo.com}
。我想要
foo.com

如何从

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

postgresql-13
2个回答
4
投票

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

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

将返回

{foo}
,同时

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

将返回“{com}”。

一旦有了文本数组,您就可以使用常规数组索引从返回的文本数组中提取值。例如:

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

返回

'foo'

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

回归

'com'

db<>在这里摆弄其他替代方案


0
投票

如果 'regexp_match(email, '(\w+.\w+)$')' 返回 '{foo.com}' 但你只需要 'foo.com',你应该使用圆括号,如 ()[1]

update users 
set email_base_domain = (regexp_match(email, '(\w+\.\w+)$'))[1]
© www.soinside.com 2019 - 2024. All rights reserved.