正则表达式模式,用于搜索电子邮件中"@"之前的字符



我希望能够在数据库中查询与正则表达式匹配的电子邮件地址。我试图避免的一个例子是:
在我的数据库中,我有一个用户的电子邮件地址为amy.user@gmail.com
我还有700个用户的域名为@amyconsulting.com

当我像这样搜索Amy时,我现在的当前搜索将返回701个结果,而不是1个:^.*amy.*$
如何只搜索电子邮件地址中@符号之前的字符?提前感谢。。。

另一个选项是使用否定字符类[^@]*,匹配除@之外的任何字符的0+次出现

如果您不想匹配换行符,也可以使用[^@rn]*[^s@]来不匹配空格。

^[^@]*amy[^@]*@[^@]+$

解释

  • ^字符串开始
  • [^@]*匹配除@之外的任何字符的0+出现次数
  • amy
  • [^@]*匹配除@之外的任何字符的0+次
  • @@匹配
  • [^@]+匹配除@之外的任何字符的1+次出现
  • $字符串结束

Regex演示

这不太可能涵盖所有电子邮件案例,但根据您发布的示例,您可以从这里开始改进您的正则表达式:

.*(amy).*@[w]+(.)[w]+

它接受在电子邮件正则表达式模式之前包含单词amy的字符串。同样,我没有查找电子邮件的最佳正则表达式,但这一个给出了应该如何处理问题的想法。

我建议使用Regex101,那里有一个非常酷的游乐场,可以帮助学习新的正则表达式符号来解决问题。

最新更新