我需要一个正则表达式来混淆我拥有的数据库转储文件中的电子邮件。 我想将所有域替换为@fake.com类的固定域,以免在开发过程中冒风险向真实人发送电子邮件。 电子邮件确实必须唯一才能匹配数据库约束,因此我只想替换域并保留用户名。

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

\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

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

编辑:

请注意,在这种情况下,我刚刚意识到可以替换@[A-Z0-9.-]+\\.[AZ]{2,4}\\b找到的所有字符串,但是从学术上讲,我仍然对您的使用方式感兴趣可以将电子邮件正则表达式的每个部分都视为令牌,并分别替换用户名/域。

===============>>#1 票数:7 已采纳

SublimeText

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

以下是两种可能的方法:

  1. 如果可以假设@不会出现在其他任何上下文中(对于普通文本来说这是一个相当合理的假设),那么您只需搜索域部分@[A-Z0-9.-]+\\.[AZ]{2,4}\\b并将其替换。

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

    找什么

     \\b([A-Z0-9._%-]+)@[A-Z0-9.-]+\\.[AZ]{2,4}\\b 

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

    用。。。来代替

     $1@fake.com 

    $1表示第一个捕获组捕获的文本。

请注意,对于以上两种方法,您都需要关闭区分大小写的功能(指示为左下角的第二个按钮),除非您特别希望仅删除以全大写形式编写的电子邮件。

===============>>#2 票数:1

您可以对Vim使用以下命令:

:%s/\(\<[A-Za-z0-9._%-]\+@\)[A-Za-z0-9.-]\+\.[A-Za-z]\{2,4}\>/\1fake.com/g

\\(\\)之间的所有内容都将成为一个组,该组将由该组的转义数字代替(本例中为\\1 )。 我还修改了正则表达式以匹配小写字母并具有与Vim兼容的语法。

另外,您可以通过将\\c放在正则表达式中的任何位置来关闭区分大小写,如下所示:

:%s/\c\(\<[A-Z0-9._%-]\+@\)[A-Z0-9.-]\+\.[A-Z]\{2,4}\>/\1fake.com/g

另请注意,该行开头的%要求Vim在整个文件中进行替换,而在末尾的g在同一行中进行多次替换。

另一种方法是使用零宽度匹配( \\@<= ):

:%s/\c\(\<[A-Z0-9._%-]\+@\)\@<=[A-Z0-9.-]\+\.[A-Z]\{2,4}\>/fake.com/g

  ask by James McMahon translate from so

未解决问题?本站智能推荐: