Regex 正则表达式:电子邮件包含数字,但它们不是按年份排列的
我是使用正则表达式的新手,在一些教程之后,我很难实现一个匹配标准,比如“电子邮件包含数字,但它们不是年份模式” 我有一个简单的正则表达式来表示“包含数字”: 考虑到电子邮件地址中确实有数字,我希望找到以下表达式中不存在的匹配项:Regex 正则表达式:电子邮件包含数字,但它们不是按年份排列的,regex,email,2-digit-year,Regex,Email,2 Digit Year,我是使用正则表达式的新手,在一些教程之后,我很难实现一个匹配标准,比如“电子邮件包含数字,但它们不是年份模式” 我有一个简单的正则表达式来表示“包含数字”: 考虑到电子邮件地址中确实有数字,我希望找到以下表达式中不存在的匹配项: \w*(19|20)\d{2}\D*(?=@) \w*[6-9][0-9]\D*(?=@) \w*[0-1][0-9]\D*(?=@) 在正则表达式中,我如何表达这一点 匹配输入示例: foo123@gmail.com a22oo@hotmail.com hoo567
\w*(19|20)\d{2}\D*(?=@)
\w*[6-9][0-9]\D*(?=@)
\w*[0-1][0-9]\D*(?=@)
在正则表达式中,我如何表达这一点
匹配输入示例:
foo123@gmail.com
a22oo@hotmail.com
hoo567@outlook.com
foo@gmail.com
johndoe88@hotmail.com
john1976@outlook.com
非匹配输入示例:
foo123@gmail.com
a22oo@hotmail.com
hoo567@outlook.com
foo@gmail.com
johndoe88@hotmail.com
john1976@outlook.com
正则表达式很难反转,即不匹配某个对象 在您的简单示例中,我只需解析任意长的数字,然后执行签入代码,最好是在将其转换为整数之后 但对于你的问题,下面将颠倒这些情况,只是或将它们结合在一起
(\d)| 1 digit
([2345]\d)| 2 digits not starting with 0,1,6,7,8,9
(\d\d\d)| 3 digits
((1[^9]|2[^0]|[03-9]\d)\d\d)| 4 digits not starting with 19 or 20
(\d\d\d\d\d*) 5+ digits
像这样的。我相信有人能把它弄得更漂亮
编辑
下面是完整的正则表达式,现在已通过所有可能的情况进行了正确测试,我可以考虑匹配您指定的标准,以及正确的边界测试(请参阅):
此正则表达式传递您的示例:
\D(?![6-9]\d\D)\d{2,3}\D
请参阅。为什么要使用正则表达式?请给出ok和not ok输入的示例。考虑到某人也可能在99岁以上。我已经举了一些例子。也许?如果我理解正确的话,您会发现3位和2位数字有问题。我昨天在您自己编辑之前使用了您的答案,并做了一些更改:
(\D\D\D*@)(\D[2345]\D\D*@)(\D\D\D\D*@)(\D(1[^9]| 2[^0]|[03-9]\D)\D\D*@)(\D\D\D\D\D*@)
这给了我正在搜索的匹配项,但也许我还是犯了一些错误。你的新正则表达式与'johndoe2003@yahoo.com.br"和"福",_john99@hotmail.com,这些是我需要跳过的电子邮件。不过,你的回答还是很有帮助的,谢谢你。没有比得上johndoe2003@yahoo.com.br"和"福",_john99@hotmail.com'. ;) 如果你对解决方案感到满意,并且认为没有人会在答案上有所改进,那么请接受,或者投票。嗯。。。也许我只是在使用Oracle SQL的正则表达式函数时遇到了问题。我试图提高投票率,但似乎我没有足够的代表来做这件事:\n你的版本同样好。备注:接受(绿色复选标记)始终有效。因为你需要15次重复。