Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:电子邮件包含数字,但它们不是按年份排列的_Regex_Email_2 Digit Year - Fatal编程技术网

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次重复。