首页 > 解决方案 > 如何使用正则表达式从电子邮件中排除某个域而无需负前瞻?

问题描述

对于以下数据,如何在使用 REGEXP_LIKE 的 where 子句的一行中排除所有以 gmail.com 作为域的电子邮件?由于数据库约束和业务逻辑,我需要使用 REGEXP_LIKE 上的正则表达式将其排除。关于如何附加到正则表达式(由于 plsql 没有负前瞻)排除的任何想法?请指教。谢谢!

WITH t AS
( 
 SELECT 'brucewayne.1981@gmail.com' email
    FROM dual  
  UNION ALL  
  SELECT 'clark_kent@gmail.com'
    FROM dual  
  UNION ALL  
  SELECT '1Tonystark.1980@gmail.com'
    FROM dual  
  UNION ALL  
  SELECT 'peter@parker.1989@yahoo.com'
    FROM dual  
  UNION ALL  
  SELECT 'pete.1989@yahoo.com'
    FROM dual  
  UNION ALL  
  SELECT 'yahoo.com'
    FROM dual  
  UNION ALL  
  SELECT '123@yahoo.com' FROM dual
)    
SELECT *
  FROM t    
 WHERE REGEXP_LIKE (EMAIL,'^[^.]?[A-Za-z0-9!#$%&''*+-/=?^_`{|}~\.]{1,62}[^.]?@[^.-]?[A-Za-z0-9.-]{1,253}[^.-]\.[A-Za-z]{2,256}$')

标签: sqlregexoracle

解决方案


用于NOT LIKE排除

WHERE REGEXP_LIKE (EMAIL,'^[^.]?[A-Za-z0-9!#$%&''*+-/=?^_`{|}~\.]{1,62}[^.]?@[^.-]?[A-Za-z0-9.-]{1,253}[^.-]\.[A-Za-z]{2,256}$')
AND EMAIL NOT LIKE '%@gmail.com'

推荐阅读