我正在尝试解析一个vCard文件,以获取我工作所需的小型个人实用程序。在这个例子中,我试图只匹配电子邮件地址。文件中的行如下所示:
EMAIL;PREF;INTERNET:MikeSmith@FastFoodInc.com
My Regex看起来像这样:
(?:^EMAIL;PREF;INTERNET:)(\w+@\w+\.\w+)\n
如果我没有弄错的话,我有一个不匹配的组和一个匹配的组。
(?:^EMAIL;PREF;INTERNET:)
这不应该匹配但不能捕获以" (?:^EMAIL;PREF;INTERNET:)
"开头的群组。然后应该捕获第二组?我正在捕捉整条线。
答案 0 :(得分:1)
你正在使用匹配并向后捕获。匹配是指模式匹配的整个文本,捕获是指parens中的部分。因此,您不是只是尝试匹配电子邮件,而是尝试捕获电子邮件。您的模式与整行相匹配,这正是regexr.com向您展示的内容。如果您然后检查捕获的部分,您将看到它包含您期望的内容。
此外,如果您不打算捕获它,则无需对第一部分进行分组,因此您可以使用:
^EMAIL;PREF;INTERNET:(\w+@\w+\.\w+)\n
如果您知道只有一个电子邮件地址跟随该标签,您可以进一步缩短为:
^EMAIL;PREF;INTERNET:(.+)$