使用正则表达式进行解析而不使用尾随字符

时间:2012-07-21 20:20:22

标签: regex parsing

如何以该格式成功解析下面的文本以解析

To: User <test@test.com> 

To: <test@test.com>

当我尝试用

解析下面的文本时
/To:.*<[A-Z0-9._+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}>/mi

抓住

Message-ID <CC2E81A5.6B9%test@test.com>, 

我在答案中不想要。

我尝试过使用$和\ z并且都没有工作。我做错了什么?

要解析的信息

To: User <test@test.com> Message-ID <CC2E81A5.6B9%test@test.com>
To:

<test@test.com>

这是我在Rubular http://rubular.com/r/DQMQC4TQLV

中的解析信息

2 个答案:

答案 0 :(得分:1)

您需要通过在其后添加问号来使通配符匹配非贪婪:

To:.*?<[A-Z0-9._+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}>

答案 1 :(得分:1)

由于您还没有明确说明您的工具/语言是什么,因此必须做出假设。

一般来说,正则表达式模式匹配往往是积极的,匹配最长的模式。您的模式从.*开始,这意味着您将匹配最长的字符串ENDS与模式<[A-Z0-9._+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}>的其余部分匹配,该字符串与<CC2E81A5.6B9%test@test.com>匹配Message-ID

Apalala和nhahtdh的评论都给你一些尝试。在开始时避免使用全包.*并使用更具体的内容:匹配前导空格,或者匹配任何内容除了您真正感兴趣的第一部分之外。