如何在postgresql中的电子邮件的最后一个'@'字符之前提取部分?

时间:2018-05-02 11:40:20

标签: regex postgresql substring

电子邮件示例:ex@mpleEm@il@mymail.com

预期结果:ex@mpleEm@il

我该怎么做?

2 个答案:

答案 0 :(得分:2)

使用substring(string from pattern):

select substring('ex@mpleEm@il@mymail.com' from '(.*)@');

  substring   
--------------
 ex@mpleEm@il
(1 row)

答案 1 :(得分:2)

最简单的解决方案可能是使用a POSIX regular expression match

select substring('ex@mpleEm@il@mymail.com' from '(.*)@');

这里有两个微妙的事情:

  • 根据POSIX正则表达式的规则,.*尽可能匹配 ,这就是为什么它包含额外的@ s(比较select substring('ex@mpleEm@il@mymail.com' from '(.*?)@');有一个"非贪婪的"修饰符)
  • 如果有任何捕获括号,substring函数将返回第一次捕获的内容,这就是为什么不包含<{1}} 的原因@没有捕获括号)