为什么这个正则表达式表达式不匹配电子邮件?

时间:2015-01-20 16:12:15

标签: regex

http://regexr.com/3a8dc

我正在尝试解析一个vCard文件,以获取我工作所需的小型个人实用程序。在这个例子中,我试图只匹配电子邮件地址。文件中的行如下所示:

EMAIL;PREF;INTERNET:MikeSmith@FastFoodInc.com

My Regex看起来像这样:

(?:^EMAIL;PREF;INTERNET:)(\w+@\w+\.\w+)\n

如果我没有弄错的话,我有一个不匹配的组和一个匹配的组。

(?:^EMAIL;PREF;INTERNET:)

这不应该匹配但不能捕获以" (?:^EMAIL;PREF;INTERNET:)"开头的群组。然后应该捕获第二组?我正在捕捉整条线。

1 个答案:

答案 0 :(得分:1)

你正在使用匹配并向后捕获。匹配是指模式匹配的整个文本,捕获是指parens中的部分。因此,您不是只是尝试匹配电子邮件,而是尝试捕获电子邮件。您的模式与整行相匹配,这正是regexr.com向您展示的内容。如果您然后检查捕获的部分,您将看到它包含您期望的内容。

此外,如果您不打算捕获它,则无需对第一部分进行分组,因此您可以使用:

^EMAIL;PREF;INTERNET:(\w+@\w+\.\w+)\n

如果您知道只有一个电子邮件地址跟随该标签,您可以进一步缩短为:

^EMAIL;PREF;INTERNET:(.+)$