【问题标题】:imap headers returned formatted string broken down into valuesimap 标头返回的格式化字符串分解为值
【发布时间】:2013-01-12 07:19:49
【问题描述】:

我有一个通过 imap_headers() 返回的字符串,其格式如下:

Flags Number) Date Sender Subject (Size)

并且从数组中返回的示例字符串是:

A 454)22-Jun-2004 cust.serv@amazon.co.uk Your Amazon.co.uk Order (5284 chars)
1)10-Oct-2010 Gmail Team Get Gmail on your mobile (2457 chars)
5)12-Nov-2010 =?ISO-8859-1?Q?Eric_ For Website (671669 chars)
U 6)17-Nov-2010 no-reply@hostmessage host.net account : boom (2082 chars)

我想解码/解析这个字符串并从这个字符串中创建一个对象。 例如

Flags
Date
Sender
Subject

我发现使用 php 字符串函数很难解析这个,因为这个字符串只是用空格分隔。有人可以帮我吗?发件人部分也可以是姓名,因此我们可以将其视为电子邮件地址或网站 url。

【问题讨论】:

  • 仅基于一个示例,几乎不可能编写一个正则表达式来解决您的问题。你必须自己做。尝试一下,然后发布您的结果和您的问题,以便我们帮助您改进正则表达式。
  • 是的。就像我想的那样,这几乎是不可能的。
  • 这并非不可能。根据您提供的信息,我们无法确定您需要什么。如果你从来没有听说过正则表达式,那肯定很难找到合适的解决方案。

标签: php regex


【解决方案1】:

正如我在上面的 cmets 中提到的,创建一个适合您的正则表达式几乎是不可能的,因为您没有提供足够的信息。但是,我会给你一个与你的线路相匹配的例子,也许你可以从那里继续:

preg_match('_([A-Z]+) (\d+)\)(\d+-[A-Za-z]+-\d{4}) (\S+@\S+\.\S+) (.+) \((\d+) chars\)_', $header, $matches);
var_dump($matches);

现在,如果您需要扩展此表达式以考虑可能输出的其他变体,这取决于您的应用程序。您可以在official documentation 中阅读我在那里所做的所有详细信息。

【讨论】:

  • 也许这对你有帮助,即使它是一个德语页面:regexp-evaluator.de/evaluator/3f07ca4aeb6f58721dfee93177696a0e/… 你可以在那里摆弄正则表达式,看看它会产生什么结果。即使您不理解该页面,也应该非常简单。 ;)
  • 谢谢伙计。我会试试这个。非常尊重这种努力。
  • 我可以在这里发布各种可能的字符串结果吗?
  • 我宁愿你试着弄清楚我在那里做了什么。 ;) 无论如何,您必须在某个时候了解正则表达式的魔力。但是您可以在您的问题中添加更多示例,如果我能找到时间,我可能会帮助您修改表达式。
  • 好的,我会发布更多示例,但我会尽力解决这个问题。再次感谢一堆。 :)
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多