使用REGEXP_SUBSTR在Oracle中使用正则表达式

时间:2013-09-09 08:20:08

标签: sql regex oracle

我想将电子邮件地址作为字符串的一部分。 例如,如果字符串是

  

“您的姓名(your@name.com)”aaa@bbb.com

然后我想只得到

  

aaaa@bbb.com

基本上如果我可以删除

中的字符串
  

“”

然后就可以了。我使用REGEXP_SUBSTR

下面的正则表达式
REGEXP_SUBSTR('"your name(abc@dd.com)" aaa@bbb.com',
             '([a-zA-Z0-9_.\-])+@(([a-zA-Z0-9-])+[.])+([a-zA-Z0-9]{2,4})+') 

请帮助。

3 个答案:

答案 0 :(得分:0)

您可能需要更多内容:

REGEXP_SUBSTR('"your name(abc@dd.com)" aaa@bbb.com','[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}')

[.]之类的东西真的没有意义,点匹配任何字符,方括号是一种“OR”语句,里面的任何字符都可以进入那个地方,但在你的情况下你真的想要匹配文字点,所以你需要转义\.不确定oracle如何处理转义,你可能需要双重转义它们。

答案 1 :(得分:0)

SELECT  REGEXP_SUBSTR(email, '[A-Za-z0-9\_\-\.]+@\w+\.\w+', 1, 2) AS cleaned_email
FROM
(
        SELECT  '"your name(your@name.com)" aaa@bbb.com'      AS email FROM DUAL UNION ALL
        SELECT  '"your name(your.name@name.com)" aaa@bbb.com' AS email FROM DUAL
)
;

答案 2 :(得分:0)

您可以使用$锚点简单地指示匹配必须发生在字符串的末尾。

with t1(col) as(
   select '"your name(your@name.com)" aaa@bbb.com' from dual
)

select regexp_substr(col, '[[:alnum:]._%-]+@[[:alnum:]._%-]+\.com$') as res
  from t1

结果:

RES
-----------
aaa@bbb.com