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

时间:2014-09-19 13:54:38

标签: 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.comtest @ test.com;

通过我较小的第一个正则表达式,他不能通过。

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

是否有一种方法可以制作一些"组"可重复使用只能写一次

((?:[a-zA-Z0-9_\-\.]+)@(?:[a-zA-Z0-9\-]+\.)(?:[a-zA-Z]{2,3}))

并将其重用到同一个正则表达式中?

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

非常感谢

1 个答案:

答案 0 :(得分:1)

我正在使用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()

参考python docs 并查找邮件ID

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

不知道在php