我希望能够在数据库中查询与正则表达式匹配的电子邮件地址。我试图避免的一个例子是:
在我的数据库中,我有一个用户的电子邮件地址为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,那里有一个非常酷的游乐场,可以帮助学习新的正则表达式符号来解决问题。