簡體   English   中英

正則表達式不起作用

[英]Regular expression not working

當正文如下時,我正在嘗試從轉發的電子郵件中獲取和抄送該電子郵件:

$body = '-------
Begin forwarded message:


From: Sarah Johnson <blabla@gmail.com>

Subject: email subject

Date: February 22, 2013 3:48:12 AM

To: Email Recipient <thatwouldbe@yayyy.com>

Cc: Ralph Johnson <johnson@gmail.com>


Hi,


hello, thank you and goodbye!

 blabla@gmail.com'

現在,當我執行以下操作時:

$body = strtolower($body);
$pattern = '#from: \D*\S([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})\S#';
if (preg_match($pattern, $body, $arr_matches)) {
     echo htmlentities($arr_matches[0]);
     die();
}

我正確地得到:

from: sarah johnson <blabla@gmail.com>

現在,為什么抄送不起作用? 我做的事情很相似,只是從改為cc:

$body = strtolower($body);
$pattern = '#cc: \D*\S([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})\S#';
if (preg_match($pattern, $body, $arr_matches)) {
     echo htmlentities($arr_matches[0]);
     die();
}

我得到:

cc: ralph johnson <johnson@gmail.com> hi, hello, thank you and goodbye! blabla@gmail.com

如果我從原始頁腳中刪除了電子郵件(刪除blabla@gmail.com),那么我正確地得到了:

cc: ralph johnson <johnson@gmail.com>

電子郵件似乎正在影響正則表達式。 但是,它如何以及為什么不從頭開始影響它呢? 我怎樣才能解決這個問題?

問題是\\D*匹配太多,即它也匹配換行符。 我在這里會更加嚴格。 為什么要完全使用\\D (而不是數字)?

使用例如[^@]*可以正常工作

cc: [^@]*\S([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})\S

在Regexr上看到它。

這樣,您可以確保第一部分與電子郵件地址不匹配。

\\D也是原因,它適用於第一個“發件人”案例。 “日期”行中有數字,因此在該行中不匹配。

這樣嘗試

$body = '-------
Begin forwarded message:


From: Sarah Johnson <blabla@gmail.com>

Subject: email subject

Date: February 22, 2013 3:48:12 AM

To: Email Recipient <thatwouldbe@yayyy.com>

Cc: Ralph Johnson <johnson@gmail.com>


Hi,


hello, thank you and goodbye!

 blabla@gmail.com';

$pattern = '#(?:from|Cc):\s+[^<>]+<([^@]+@[^>\s]+)>#is';
preg_match_all($pattern, $body, $arr_matches);
echo '<pre>' . htmlspecialchars(print_r($arr_matches, 1)) . '</pre>';

產量

Array
(
    [0] => Array
        (
            [0] => From: Sarah Johnson <blabla@gmail.com>
            [1] => Cc: Ralph Johnson <johnson@gmail.com>
        )

    [1] => Array
        (
            [0] => blabla@gmail.com
            [1] => johnson@gmail.com
        )

)

$arr_matches[1][0] - "From" email
$arr_matches[1][1] - "Cc" email

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM