2010-07-04 40 views
3

我试图匹配冒号分隔的电子邮件列表。为了简单起见,我将离开电子邮件表达式,并将它与任意数量的字符进行匹配,并在它们之间没有空格。正则表达式,冒号分隔列表

下面将要匹配...

somevalues ;somevalues;  somevalues; 

somevalues; somevalues    ;somevalues 

的结束;应该没有必要。

以下内容将不匹配。

somevalues ; some values somevalues; 

some values; somevalues some values 

到目前为止,我已经得到了这一点,但它不工作。由于我允许冒号之间的空格,因此表达式不知道空格是否在单词中或冒号之间。

([a-zA-Z]*\s*\;?\s*)* 

以下是匹配的(这不应该E)

somevalue ; somevalues some values; 

我如何表达只允许空间,如果有一个;它的左边还是右边?

+0

([a-zA-Z] * \ s * \;?\ s *)*如果我没有弄错,只会考虑第一个冒号,那么为什么它与第二个冒号相匹配。 – Prix 2010-07-04 18:51:32

+0

在这里,你可以知道你需要的一切正则表达式[点击这里](http://www.wellho.net/regex/java。html) 2010-07-04 20:38:09

回答

1

以下PCRE表达式应该可以工作。

\w+\s*(?:(?:;(?:\s*\w+\s*)?)+)?

但是,如果把电子邮件地址验证的正则表达式上,这将需要 与(?:<your email validation regex>)

更换\w+ Probabbly这是你想要什么,就http://regexr.com?2rnce

编辑测试:但是根据你可能会用哪种语言?需要转义;作为\;

+0

这正是我正在寻找的。我正在使用C#中的String.Split,但是我想在性能方面做任何事情之前在客户端验证文本框。 – 2010-07-04 20:11:49

+0

你能发布最终的正则表达式与电子邮件地址验证? – 2010-07-05 04:42:43

6

为什么不只是分开分号,然后将电子邮件地址正则表达?

+4

如果我没有弄错分号是RFC822电子邮件地址中的一个有效字符,所以在使用这个电子邮件时确保不包含任何分号时应该小心。 – 2010-07-04 18:57:32

+0

有趣 - 不知道我的前景如何处理。我认为RFC2822已经取代,但我还没有阅读过。 – 2010-07-04 19:07:52

0

问题来自?在\;中?

[a-zA-Z]*(\s*;\s*[a-zA-Z]*)* 

应该工作。

0

尝试

([a-zA-Z]+\s*;\s*)*([a-zA-Z]+\s*\)? 

注意,我改变*到+在电子邮件模式,因为我认为你不希望像;字符串相匹配。