为什么grep懒惰地匹配我的正则表达式?

时间:2018-06-20 17:47:56

标签: regex email grep email-validation regex-greedy

我正在尝试编写一个简单的电子邮件正则表达式,并使用grep(在Kali linux上,如果重要的话)提取电子邮件本身。 这(大概)是我的代码:

email_regex='([a-zA-Z0-9_.+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-])+)'
egrep -o "$email_regex" e

其中e是包含电子邮件地址的文件,例如“ a@b.co.uk”

egrep返回“ a@b.c”。

我尝试了以下正则表达式:

  • ([a-zA-Z0-9_.+-]+@([a-zA-Z0-9_-]\.)+[a-zA-Z0-9_-]+)-返回“ a@b.co”
  • ([a-zA-Z0-9_.+-]+@[a-zA-Z0-9_-]+\.[a-zA-Z0-9._-]+)-返回“ a@b.co.uk”,但也检测到“ a@b.com。”为有效地址,我不希望这样。
  • 其他一些事情也没有取得好的结果

在我到处看的地方,我只发现了关于如何使grep延迟匹配的问题,因为默认值应该是贪婪的。

1 个答案:

答案 0 :(得分:1)

此正则表达式应为您工作:

email_regex='[a-zA-Z0-9_.+-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+'

在您的正则表达式中,最后一个字符类[a-zA-Z0-9_-]缺少量词+