PHP正则表达式 - 从文本块的行中获取主机名

时间:2011-04-03 17:33:08

标签: php regex grep

我在PHP中有一个变量,它包含一个大文本(确切地说是一个电子邮件标题)。

我想从这个标题中获取2件事。这是一个示例标题:

Received: by mozg.ha.domain.net (Postfix, from userid 0)
    id E714C9AEDE; Tue, 29 Mar 2011 10:22:42 +0200 (CEST)
Subject: This is some text before hs34940.somedomain.tld
X-internal-Template: mozg/de/shipping.model

现在,从这篇文章中,我想获得2个变量。 一个包含 hs34940.somedomain.tld ,另一个包含数字的最后4位数字,在本例中为 4940 。数字的长度是可变的。

我目前在变量$ header中有这个,我很想从中得到$ number和$ name。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这里有一个简单的方法,使用正则表达式来获取这一行:

Subject: This is some text before hs34940.somedomain.tld

获得第一场比赛的另一场比赛:hs34940.somedomain.tld

如果数字的位数是固定的,那么只需使用一个substr。

有用的API:

Preg_match($pattern,$match,$result) - 将模式与文字进行匹配。

substr($start_indes,$finish_index,$string) - 获取字符串的特定部分。


对于主题标题:preg_match('/Subject: [a-zA-Z0-9. ]*/', $header, $headline); 对于域:preg_match('/[a-z0-9]*[.][a-z0-9]*[.][a-z]*/', $headline[0],$domain);

这不太通用,但对于你的情况会很好。

答案 1 :(得分:0)

我不是正则表达式的专家,但这可能有所帮助。

preg_match('/\d{4}\.somedomain.tld.*|\.somedomain1.tld.*/', $header, $arr);

$ arr [0]会给你4940.somedomain.tld

我尝试了this tool

然后你可以使用substr或explode来获取号码和域名