2010-04-26 86 views
0

我有這樣的文字:從所附的返回信息正則表達式和換行符

<[email protected]> If you do so, please include this problem report. 
<[email protected]> You can delete your 

自己 文本。

    The mail system 

<[email protected]>: connect to *.net[82.*.86.*]: Connection timed 
out 

我不得不從它解析電子郵件。你能幫我做這份工作嗎?


UPD

有可能是在<%這裏%>另一個電子郵件地址。 '郵件系統'文本之間應該有連接。我需要在電子郵件中追蹤該文本。

回答

3

考慮到該文本存儲在$文本,你看這個:

$matches = array(); 
if (preg_match('/<([^>]+)>/', $text, $matches)) { 
    var_dump($matches[1]); 
} 

這給了我:

string '[email protected]' (length=13) 


基本上,我用一個非常簡單的正則表達式,匹配:

  • a < character
  • 東西,這不是一個>字符:[^>]
    • 至少一次:[^>]+
    • 捕獲它:([^>]+)
  • 一個>字符

所以,它抓住任何之間的<>。後


編輯點評+編輯OP的:

如果你只想要電子郵件地址郵件系統後的,你可以這樣做:

$matches = array(); 
if (preg_match('/The mail system\s*<([^>]+)>/', $text, $matches)) { 
    var_dump($matches[1]); 
} 

除了之前發佈的內容之外,這期望:

  • 字符串The mail system
  • 任意數量的白色字符:\s*
+0

剎車時可能會有另一封電子郵件:<[email protected]>。應該連接,例如,文本'郵件系統'和電子郵件 – Ockonal 2010-04-26 11:18:52

+0

胡...不太清楚你想要什麼,然後...你能編輯你的問題,給我們一些額外的例子,與期望輸出? – 2010-04-26 11:20:15

+0

請參閱更新後的帖子。 – Ockonal 2010-04-26 11:22:08

2

你想用preg_match()看着這個輸入應該是簡單的:

<?php 

if (preg_match('/<([^>]*[email protected][^>]*>/', $data, $matches)) { 
    var_dump($matches); // specifically look at $matches[1] 
} 

有跡象表明,將匹配其他模式它,你不必堅持相同的模式。您輸入的'<'和'>'在這裏很有幫助。