Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式-从文本块的一行获取主机名_Php_Regex_Grep - Fatal编程技术网

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

PHP正则表达式-从文本块的一行获取主机名,php,regex,grep,Php,Regex,Grep,我在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-Templa

我在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
现在,从本文中,我想得到两个变量。 一个包含hs34940.somedomain.tld,另一个包含数字的最后4位,在本例中为4940。数字的长度是可变的

我现在在变量$header中得到了这个,我想从中得到$number和$name


非常感谢您的帮助。

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

Subject: This is some text before hs34940.somedomain.tld
第一个匹配中的另一个:hs34940.somedomain.tld

对于数字,如果位数是固定的,只需使用substr

有用的API:

-将模式与文本匹配

-获取字符串的特定部分


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


这不太一般,但对于你的情况来说,效果很好。

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

preg_match('/\d{4}\.somedomain.tld.*|\.somedomain1.tld.*/', $header, $arr);
$arr[0]将为您提供
4940.somedomain.tld

我试过了


然后您可以使用substr或explode获取数字,域名

somedomain.tld
将保持不变或将发生变化?somedomain.tld可以是两个不同的值。它可以是或some1.tld或domain2.tld。这是我一直试图做的,但我似乎不知道如何将任何有效内容放入其中:/what似乎有问题?正则表达式不匹配?我想是的。。。它返回一个“有效数组”,但该数组为空。您能否在上面添加一个关于如何获取hs34940.somedomain.tld的示例?谢谢