我希望有一个定期的epxresion,允许检查给出的电子邮件地址是否正确。首先,它将检查特定提供者是否存在,在这种情况下(@test.de
) - 这不是问题。但是,允许的电子邮件名称必须仅包含字母或点。所以:.@test.de
有效。但是这个具体案例不被接受。我的正则表达式如下所示:
[A-Za-z\.]{1,}\b@test\.de\b
对于所有其他情况,它可以正常工作,但如果是" .
"只是在它不适合的@
前面。
指出我做错了什么?
答案 0 :(得分:2)
模式中的第一个单词\b
要求@
之前必须有单词char。因此,点不能出现在那里,匹配失败。
您需要删除单词边界,使用
[A-Za-z.]+@test\.de\b
请注意,您不需要在字符类中转义一个点,它已经表示一个文字点。
如果您仍想在删除\b
后匹配“整个”字词,则可以使用lookbehinds(如果正则表达式引擎支持它们):
(?<!\w)[A-Za-z.]+@test\.de\b
或仅在字符串的空格/开头后匹配:
(?<!\S)[A-Za-z.]+@test\.de\b
如果名称以字母开头,则只使用字边界;如果以字母开头,则使用非字边界:
(?:\b[A-Za-z]|\B\.)[A-Za-z.]*@test\.de\b
请参阅this demo