在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数据和公式 任何建议将不胜感激。谢谢。
答案 0 :(得分:2)
此模式匹配yahoo REPLACE部分正下方的所有内容,而不是上述优秀案例中的所有内容:
^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$
以下其他情况,例如yahool.com,可以添加为可选匹配项,如下所示:
^yahoo\.com?(?:(?!\.[a-z]{2}).)*(?:.com?)?$|^yahoo$|^yahool\.com|^yahooo\.com|^yahoo\.net|^yahoocom$
等。但是,有些可以很容易地组合在一起。