具有否定前瞻功能的regexp_replace来清理电子邮件地址

时间:2017-11-22 23:36:03

标签: regex postgresql negative-lookahead

在postgres中我使用 regexp_replace 来清理一些雅虎电子邮件地址。

SELECT regexp_replace(domain,'yahoo\.co[^\.].*','yahoo.com')  FROM table  

不幸的是,这个表达式匹配 yahoo.com.tw 这个类型 NOT MATCH 。我喜欢正则表达式:

不匹配

yahoo.es
yahoo.co.jp
yahoo.com.tw  

MATCH

yahoo.com,
yahoo.com.
yahoo.com'

我已经在这里待了好几个小时了,看了几堆这样的链接: Regular expression to match a line that doesn't contain a word?

他们帮我写了一个负面的预测,但似乎无法将它与 yahoo 部分结合起来

负面的LOOKAHEAD

     ^(?!.*(\.com?\.|\.[a-z]{2})).*$    

以下是regex101数据和公式 任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

此模式匹配yahoo REPLACE部分正下方的所有内容,而不是上述优秀案例中的所有内容:

^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$

Demo

以下其他情况,例如yahool.com,可以添加为可选匹配项,如下所示:

^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$|^yahoo$|^yahool\.com|^yahooo\.com|^yahoo\.net|^yahoocom$

等。但是,有些可以很容易地组合在一起。