Regex 工作正则表达式、多电子邮件验证程序、挑战改进

Regex 工作正则表达式、多电子邮件验证程序、挑战改进,regex,Regex,我只是在这里提出了解决方案,解决了我在开发过程中遇到的一个问题,以便从您在regex上的经验中获得最大的反馈。目标是学习如何减少regex的大小并提高其灵活性 出于教育目的,请解释您的更正 问题是: 我得到了一个字符串,它可以包含一些值的示例 test@test.com test@test.com; test@test.com;test@test.com test@test.com;test@test.com; 并且必须使用正则表达式验证此字符串,以便通过“;”获得不同的邮件地址 我得出以下

我只是在这里提出了解决方案,解决了我在开发过程中遇到的一个问题,以便从您在regex上的经验中获得最大的反馈。目标是学习如何减少regex的大小并提高其灵活性

出于教育目的,请解释您的更正

问题是:

我得到了一个字符串,它可以包含一些值的示例

  • test@test.com
  • test@test.com;
  • test@test.com;test@test.com
  • test@test.com;test@test.com;
并且必须使用正则表达式验证此字符串,以便通过“;”获得不同的邮件地址

我得出以下结论:

^(?:((?:[a-zA-Z0-9_\-\.]+)@(?:[a-zA-Z0-9\-]+\.)(?:[a-zA-Z]{2,3}))(\;)?$|(((?:[a-zA-Z0-9_\-\.]+)@(?:[a-zA-Z0-9\-]+\.)(?:[a-zA-Z]{2,3}))(?:\;))+((?:[a-zA-Z0-9_\-\.]+)@(?:[a-zA-Z0-9\-]+\.)(?:[a-zA-Z]{2,3}))(\;)?$)
如果这个正则表达式很长,那是因为以下示例:

  • test@test.comtest@test.com
和我的小一点的第一个正则表达式一起通过,他不能通过

我知道我可以用\w减少[a-zA-Z0-9_-。],但这不是我的主要问题

为了只写一次,有没有一种方法可以使一些“组”可重用

((?:[a-zA-Z0-9_\-\.]+)@(?:[a-zA-Z0-9\-]+\.)(?:[a-zA-Z]{2,3}))
并将其重新使用到同一个正则表达式中

该语言是PHP,但一般来说,正则表达式的问题更为广泛


非常感谢

我正在使用python,这就是我重用regex的方法,在这里re.compile将编译正则表达式以供进一步使用

prog = re.compile('(\w+@\w+\.\w{2,3})')
s=prog.search('content_to_be_searched1')
if s:
  print s.group()
r=prog.search('content_to_be_searched2')
if r:
  print r.group()
这是参考 和查找邮件id

(\w+@\w+\.\w{2,3})

不知道你用的是什么语言?如果您使用面向对象的语言,有更好的方法来验证某个内容是否是有效的电子邮件地址。例如,.NET framework有一个MailAddress对象,可以为您执行此验证,而不必使用正则表达式。你的预期产出是什么?这真的很有帮助。虽然不是完全相同,但仍然值得注意:恐怕你不能“重用”正则表达式片段(如宏)-你必须重新编码该部分,你真的需要捕获电子邮件地址吗?如果是这种情况,那么您必须重复这些模式。这是因为每个捕获组都是一个捕获组,即使它重复()。电子邮件地址的最后一个实例将始终覆盖以前的捕获。TL;博士如果您需要捕获第一组和第二组中的电子邮件,您需要那个长正则表达式。