需要一个RegEx来匹配退回电子邮件标题中的主题

时间:2013-09-08 16:32:24

标签: regex newline

我正在尝试使用正则表达式通过查找标题来匹配退回电子邮件的主题。我需要从此电子邮件标题中提取“成员资格激活”:

Received: from DOMAIN.mydomain.com (UnknownHost [127.0.0.1]) by DOMAIN.mydomain.net with SMTP;
   Fri, 6 Sep 2013 10:34:07 -0600
Date: Fri, 6 Sep 2013 10:34:07 -0600 (MDT)
From: "MyDomain.com" 
To: test@anotherdomain.com
Message-ID: <8279725.100.1378485247161.JavaMail.MYDOMAIN$@127.0.0.1>
Subject: Membership Activation
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

我试过了:

^Subject: (.+)$

但^和$不起作用,因为它们是CRLF。然后我试了一下:

[\r\n]+Subject: ((.[^\r\n])+)

但是我没有在结果的第2组中获得“会员激活”的最后一个“n”。我不确定我对CRLF的否定是否正确。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试:[\r\n]+Subject: (([^\r\n])+)

我得到了最后一个'n'。

答案 1 :(得分:1)

你的正则表达式没问题,问题是行尾^和行尾$锚点默认只匹配整个字符串的开头和结尾。 / p>

通过在正则表达式定义中使用特殊修饰符可以轻松修复此问题,使^$在每行的开头和结尾匹配,而不是整个字符串或输入的开头和结尾。此修饰符取决于语言或工具,因此您必须查找用于确定修饰符的工具或语言的文档。

例如在PHP中:

/^Subject: (.+)$/im
                  ^
     Notice the m modifier which makes ^ and $ match at the start and end of each line
Perl中的

,与PHP相同:

/^Subject: (.+)$/im

在Javascript中,与PHP相同:

/^Subject: (.+)$/im

在Python中将以下字符串传递给regex构造函数或接受正则表达式字符串的方法:

r"(?m)^Subject: (.+)$"

在Java中,与Python相同:

"(?m)^Subject: (.+)$"

在.NET中,对于处理正则表达式的每个方法,都有一个重载,它接受一个RegexOptions枚举,可以打开多行模式:

RegexOptions.Mutliline

Regex101 Demo in PHP

编辑:显然您正在使用ColdFusion,所以如果以上所有内容都无效,请尝试以下表达式:

[\s\S]+Subject: (.+)

但它没有以前的选项那么有效。

Regex101 Demo