【问题标题】:PHP regex - Get hostname from a line of a textblockPHP regex - 从文本块的一行获取主机名
【发布时间】:2011-04-03 17:33:08
【问题描述】:

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

我想从这个标题中得到两件事。这是一个示例标题:

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。

非常感谢任何帮助。

【问题讨论】:

  • somedomain.tld 是保持不变还是会变化?
  • somedomain.tld 可以是 2 个不同的值。它可以是或 some1.tld 或 domain2.tld。

标签: php regex grep


【解决方案1】:

这是一个简单的方法,使用正则表达式得到这一行:

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);

这不是太笼统,但是对于您的情况来说,效果很好。

【讨论】:

  • 这就是我一直在尝试做的事情,但我似乎无法弄清楚如何将任何有效内容放入其中:/
  • 似乎是什么问题?正则表达式不匹配?
  • 我猜是这样......它返回一个“有效数组”,但它是空的。您能否在上面添加一个有关如何获取 hs34940.somedomain.tld 的示例?谢谢
【解决方案2】:

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

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

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

我试过this tool

那么你可以使用substr或者explode来获取号码和域名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多