正则表达式替换电子邮件地址域?

Jam*_*hon 1 regex email replace

我需要一个正则表达式来混淆我拥有的数据库转储文件中的电子邮件.我想用一组域来替换所有域名,@fake.com所以我不冒险在开发过程中向真人发送电子邮件.电子邮件必须是唯一的,以匹配数据库约束,所以我只想替换域并保留用户名.

我目前有这个正则表达式来查找电子邮件

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
Run Code Online (Sandbox Code Playgroud)

如何将此搜索正则表达式转换为可以在Sublime Text或SED或Vim中的查找和替换操作中使用的正则表达式?

编辑:

只是一个注释,我刚刚意识到我可以替换@[A-Z0-9.-]+\.[A-Z]{2,4}\b在这种情况下发现的所有字符串,但在学术上我仍然对如何将电子邮件正则表达式的每个部分视为一个标记并独立替换用户名/域感兴趣.

nha*_*tdh 7

SublimeText

SublimeText使用Boost语法,它支持Perl正则表达式中相当大的一部分功能.但是对于此任务,您不需要所有这些高级构造.

以下是两种可能的方法:

  1. 如果您可以假设@它没有出现在任何其他上下文中(这对于普通文本来说是相当公平的假设),那么您可以只搜索域部分@[A-Z0-9.-]+\.[A-Z]{2,4}\b并替换它.

  2. 如果(pattern)在替换字符串中使用捕获组和反向引用.

    找什么

    \b([A-Z0-9._%-]+)@[A-Z0-9.-]+\.[A-Z]{2,4}\b
    
    Run Code Online (Sandbox Code Playgroud)

    ([A-Z0-9._%-]+) 是正则表达式中的第一个(也是唯一的)捕获组.

    用...来代替

    $1@fake.com
    
    Run Code Online (Sandbox Code Playgroud)

    $1 指第一个捕获组捕获的文本.

请注意,对于上述两种方法,您需要关闭区分大小写(表示为左下角的第二个按钮),除非您特别要删除仅使用ALL CAPS编写的电子邮件.