电子邮件正则表达式与 [dot] 匹配“.”和 [at] 代表“@”

Email Regex Match with [dot] for "." & [at] for "@"

如何通过正则表达式匹配下面列出的所有电子邮件:

maddy@gmail.com
ma123.23ddy(at)gmail.com
mad12-213dy@gmail(dot)com
ma123ddy[at]gmail[dot]com
mad123dy@gmail[dot]com 
maddy[at]gmail.com
rc.joshi62@gov[dot]ab.ws.com
rc.joshi62[at]gov.ab.ws.com
rc.joshi62[at]gov[dot]ab.ws.com
rc.joshi62@gov.ab.ws.com

c.123.joshi62(at)gov(dot)ab.ws.com
rc123.jo123shi62(at)gov.ab.ws.com
r123c.joshi62@gov(dot)ab.ws.com
c.123[dot]joshi62(at)gov(dot)ab[dot]ws[dot]com
rc123(dot)jo123shi62(at)gov(dot)ab(dot)ws(dot)com
rc123(dot)jo123shi62[at]gov(dot)ab(dot)ws(dot)com
r123c(dot)joshi62[at]gov(dot)ab[dot]ws[dot]com

我正在尝试匹配此 site:view-source:https://www.panchayat.gov.in/web/guest/who-s-is-who 的源代码中提到的所有复杂电子邮件 ID 我目前正在使用下面提到的正则表达式:

\b[A-Z0-9._%+-]+@[[A-Z0-9.-]+\.[A-Z]{2,}\b

给定这些字符串...

maddy@gmail.com
maddy[at]gmail[dot]com
maddy@gmail[dot]com
maddy[at]gmail.com
rc.joshi62@gov[dot]ab.ws.com
rc.joshi62[at]gov.ab.ws.com
rc.joshi62[at]gov[dot]ab.ws.com
rc.joshi62.gov.ab.ws.com
c.joshi62(at)gov(dot)ab.ws.com
rc.joshi62(at)gov.ab.ws.com
rc.joshi62@gov(dot)ab.ws.com

以下正则表达式匹配字符串,如果它在自己的行上...

^([\w\d]+\.)?[\w\d]+(@|\[at\]|\(at\))?[\w\d]+(\.|\[dot\]|\(dot\))[\w\d]{2,}(\.[\w\d]+\.[\w\d]+)?(\.[\w\d]+)?$

如果电子邮件出现在较大的字符串中但有空格(前后单词边界)尝试...

\b([\w\d]+\.)?[\w\d]+(@|\[at\]|\(at\))?[\w\d]+(\.|\[dot\]|\(dot\))[\w\d]{2,}(\.[\w\d]+\.[\w\d]+)?(\.[\w\d]+)?\b

给定这些字符串...

maddy@gmail.com
ma123.23ddy(at)gmail.com
mad12-213dy@gmail(dot)com
ma123ddy[at]gmail[dot]com
mad123dy@gmail[dot]com 
maddy[at]gmail.com
rc.joshi62@gov[dot]ab.ws.com
rc.joshi62[at]gov.ab.ws.com
rc.joshi62[at]gov[dot]ab.ws.com
rc.joshi62@gov.ab.ws.com
c.123.joshi62(at)gov(dot)ab.ws.com
rc123.jo123shi62(at)gov.ab.ws.com
r123c.joshi62@gov(dot)ab.ws.com
c.123[dot]joshi62(at)gov(dot)ab[dot]ws[dot]com
rc123(dot)jo123shi62(at)gov(dot)ab(dot)ws(dot)com
rc123(dot)jo123shi62[at]gov(dot)ab(dot)ws(dot)com
r123c(dot)joshi62[at]gov(dot)ab[dot]ws[dot]com

尝试...

\b([\w\d]+)?(\.)?([-])?[\w\d]+(\.)?[\w\d]+(@|\[at\]|\(at\))?[\w\d]+(\.|\[dot\]|\(dot\))[\w\d]{2,}(\.[\w\d]+\.[\w\d]+)?(\.[\w\d]+)?\b

更新:清理版本...

\b[\w\d.-]+(@|\[at\]|\(at\))[\w\d]+(\[dot\]|\(dot\)|\.)[\w\d.-]+\b

好的,这是: 正则表达式:

\b[A-Z0-9._%+-]+(@|\[at\]|\(at\))[A-Z0-9.-]+((\.|\[dot\]|\(dot\))[A-Z]{2,})+\b

与您自己的正则表达式相比,这只需添加 alternations(意思是或)。 我加:

(@|\[at\]|\(at\)) 

将匹配 '@' OR '[at]' OR '(at)'.

对于我添加的点:

(\.|\[dot\]|\(dot\))

将匹配 dot OR '[dot]' OR '(dot)'

然后我做了一组:

((\.|\[dot\]|\(dot\))[A-Z]{2,})+

这将匹配诸如“.com”和“.uk.com”这样的内容一次或多次。

更新: 我更新了正则表达式以支持“。”或“@”之前名称中的“(点)”或“[点]”:

\b[A-Z0-9._%+-]+((\.|\[dot\]|\(dot\))[A-Z0-9._%+-]+)*(@|\[at\]|\(at\))[A-Z0-9.-]+((\.|\[dot\]|\(dot\))[A-Z]{2,})+\b

现在它匹配问题中的所有示例。

顺便说一句:您在最近的正则表达式中犯的错误是将所有内容都包含在 character group 中(方括号之间)。这将以任何顺序匹配组中的每个 character

更新二:

Ups,打字错误,更新了正则表达式。