从具有设定长度的特定字符开始提取所有子字符串出现

时间:2017-12-19 03:25:48

标签: php

寻求帮助以提取从2017年(当前年份)开始的所有子字符串出现以及接下来的60个字符(总共64个字符)。子字符串不应包含任何空格。

字符串可能来自各种来源,即HTTP标头或DNS查找,因此字符串的结构将不同。但是,我需要提取的内容总是相同的(从当前年份YYYY开始,长度为64个字符和子字符串)。

字符串示例:

HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 19 Dec 2017 02:34:56 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: xyz

201712140148264celho2kam2t3ajsf3zaiwvwl424nb16es5n8r81ajbgvvo175201712140153182vfdqczsdjvss09ikk7xoannmzyhxwl1q3d8kcsnwmfenacqvz
201712151016343f6fnxgkjpjuzemgp4pbay4s5aagky5bsa5t4wns7ka1admgzp

在上面的例子中,有3次与标准匹配,两次在同一行(64个字符),另一个在不同的行(64个字符)。

**请注意:2017年日期标题中不应提取,因为接下来的60个字符包含空格。

我希望能够拿走所有3并放入数组

Array
(
    [1] => 201712140148264celho2kam2t3ajsf3zaiwvwl424nb16es5n8r81ajbgvvo175
    [2] => 201712140153182vfdqczsdjvss09ikk7xoannmzyhxwl1q3d8kcsnwmfenacqvz
    [3] => 201712151016343f6fnxgkjpjuzemgp4pbay4s5aagky5bsa5t4wns7ka1admgzp
)

1 个答案:

答案 0 :(得分:2)

您正在寻找的正则表达式是2017\S{60}。这与2017匹配,后跟完全60个非空格字符(64减去2017中的四个字符。)

要获得所有结果,您需要寻找 preg_match_all()

$matches = array();
$string = "201712140148264celho2kam2t3ajsf3zaiwvwl424nb16es5n8r81ajbgvvo175201712140153182vfdqczsdjvss09ikk7xoannmzyhxwl1q3d8kcsnwmfenacqvz201712151016343f6fnxgkjpjuzemgp4pbay4s5aagky5bsa5t4wns7ka1admgzp";
$search = preg_match_all("/2017\S{60}/", $string, $matches);
print_r($matches[0]);

哪个输出:

Array
(
    [0] => 201712140148264celho2kam2t3ajsf3zaiwvwl424nb16es5n8r81ajbgvvo175
    [1] => 201712140153182vfdqczsdjvss09ikk7xoannmzyhxwl1q3d8kcsnwmfenacqvz
    [2] => 201712151016343f6fnxgkjpjuzemgp4pbay4s5aagky5bsa5t4wns7ka1admgzp
)

可以看到 here

希望这有帮助! :)