2010-04-26 66 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] 
} 

有迹象表明,将匹配其他模式它,你不必坚持相同的模式。您输入的'<'和'>'在这里很有帮助。