1

我想获取字符串的电子邮件地址部分。例如,如果字符串是

“你的名字(你的@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})+') 

请帮助。

4

3 回答 3

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  
于 2013-09-09T08:37:10.267 回答
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
)
;
于 2013-09-09T08:32:32.633 回答
0

你可能需要更多的东西:

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

[.]没有真正意义的事情,点匹配任何字符,方括号是一种“或”语句,里面的任何字符都可以放在那个地方,但在你的情况下,你实际上想要匹配文字点,所以你需要转义\.不确定oracle如何处理转义,您可能需要对它们进行双重转义。

于 2013-09-09T08:31:35.047 回答