正则表达式和换行符

时间:2010-04-26 11:14:27

标签: php regex newline

我有这样的文字:

<Neednt@email.com> If you do so, please include this problem report. 
<Anotherneednt@email.com> You can delete your
     

自己的       来自附加的返回消息的文本。

                   The mail system

<Some@Mail.net>: connect to *.net[82.*.86.*]: Connection timed
out

我必须解析它的电子邮件。你能帮我解决这个问题吗?


UPD

&lt;%here%&gt; 中可能还有其他电子邮件地址。 “邮件系统”文本之间应该有联系。我需要在电子邮件中找到该文本。

2 个答案:

答案 0 :(得分:3)

考虑到这个文本存储在$ text中,那么:

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

这给了我:

string 'Some@Mail.net' (length=13)


基本上,我使用了一个非常简单的正则表达式,匹配:

  • 一个<字符
  • 任何不属于>字符的内容:[^>]
    • 至少一次:[^>]+
    • 捕获它:([^>]+)
  • 一个>字符

因此,它捕获了<>之间的任何内容。


评论后编辑+编辑OP:

如果您只想要邮件系统之后的电子邮件地址,您可以使用:

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

除了我之前发布的内容之外,还需要:

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

答案 1 :(得分:2)

您想使用preg_match()并查看此输入应该很简单:

<?php

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

还有其他模式可以与之匹配,您不必坚持使用相同的模式。 '&lt;'和'&gt;'在您的输入中有帮助。