Regex для получения списка-отписаться от заголовка - PullRequest
0 голосов
/ 26 марта 2011

Попытка найти REGEX для получения списка отписавшихся в заголовке письма из строки в PHP.

строка равна $ row ['emailHeader'];

Текущий код:

preg_match_all('[Ll]ist-[Uu]nsubscribe:([^\r\n)', $row['emailHeader'], $matches);

Это дает мне ноль матчей. Я ищу нечувствительный к регистру 'list-unsubscribe:', следующий за любым, пока не начнется следующий заголовок электронного письма. за списком отписки обычно следует либо http: //.., либо http: //.... В любом случае, я могу сортировать их после извлечения из заголовки, но у меня проблемы с регулярными выражениями.

Заголовок образца

Delivered-To: rcavezza@gmail.com

Received: by 10.204.154.213 with SMTP id p21cs9880bkw; Fri, 18 Mar 2011

 02:30:10 -0700 (PDT)

Received: by 10.216.6.27 with SMTP id 27mr896493wem.69.1300440610105; Fri, 18

 Mar 2011 02:30:10 -0700 (PDT)

Return-Path: <BlackBerry@e.blackberry.com>

Received: from omp.email.blackberry.com (omp.email.blackberry.com

 [12.130.139.56]) by mx.google.com with ESMTP id

 m9si6838771wer.130.2011.03.18.02.30.08; Fri, 18 Mar 2011 02:30:09 -0700 (PDT)

Received-SPF: pass (google.com: domain of BlackBerry@e.blackberry.com

 designates 12.130.139.56 as permitted sender) client-ip=12.130.139.56;

Authentication-Results: mx.google.com; spf=pass (google.com: domain of

 BlackBerry@e.blackberry.com designates 12.130.139.56 as permitted sender)

 smtp.mail=BlackBerry@e.blackberry.com; dkim=pass (test mode)

 header.i=BlackBerry@e.blackberry.com

DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=rim2;

 d=e.blackberry.com;

 h=MIME-Version:Content-Type:Date:From:Reply-To:Subject:List-Unsubscribe:To:Message-ID;

 i=BlackBerry@e.blackberry.com; bh=L4GAsbVx5z3blXLEGQxCgfBnsNc=;

 b=MHU4avprkIGvy+kVPFX2rGO60W1751sP9W19RpfSRKsPb4z+6477OvH43sHRkob3tmUxRWouXpLT

 /pbmIgRYG/ERQskQamVppPHd7lYbiLT2/VMxanhHRaiUNEE7PGRwHi5ora77hYnPdFNSprn30LE5

 WXrGgd71oqUXkf75Ytw=

DomainKey-Signature: a=rsa-sha1; c=nofws; q=dns; s=rim2; d=e.blackberry.com;

 b=Ob29t9oVYqQYjo7MC62tC3+TDWTHxfmrcWUzMeUHyIRpPNA5LGf+IPeNN2quUIxqcCV8hnbjPbmk

 hz0Hgbw3aILzg6+5eQDtqbIBl6QIzaGSNk1rHc201/aqsPmiTvqJEny0rs7dyij+mrcNvzLyLjY8

 d/1tg+k2jf77YOHqcmI=;

Received: by omp.email.blackberry.com (PowerMTA(TM) v3.5r15) id hgcj200morc5

 for <rcavezza@gmail.com>; Thu, 17 Mar 2011 13:34:05 -0700 (envelope-from

 <BlackBerry@e.blackberry.com>)

MIME-Version: 1.0

Content-Type: multipart/mixed; boundary="----msg_border"

Date: Thu, 17 Mar 2011 13:34:05 -0700

From: "BlackBerry" <BlackBerry@e.blackberry.com>

Reply-To: "BlackBerry" <reply@e.blackberry.com>

Subject: Developer News Bytes - New development tool releases!

List-Unsubscribe: <mailto:unsubscribe-rimdm.1711@im4.responsys.net>,

 <http://e.blackberry.com/servlet/optout?kptKtDUAUUDBEkJHOLSSHFntHpsDJhtEf>

X-cid: rimdm.1711.8

X-sgxh1: jJHNLFFHxnuHptQJhu

To: rcavezza@gmail.com

Message-ID: <0.0.19.2D3.1CBE4E2A90A4BD0.0@omp.email.blackberry.com>

В идеале, я бы хотел только второй список - отписаться, но я могу справиться с получением обоих и поиском.

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

вы должны использовать: ^ - начало строки $ - конец строки m - многострочный, чтобы соответствовать всем строкам

// join headers. It's possible headers to be split to 2 rows
$header = preg_replace("@\r\n\s+@", " ", $row['emailHeader']);

// i is for case insensitive, m is for multiline
preg_match_all('/^list\\-unsubscribe:(.*)$/mi', $headers, $matches); 
0 голосов
/ 26 марта 2011
preg_match_all("#List-Unsubscribe:(.*)#i", $row['emailHeader'], $matches);
...