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

问题描述 投票:1回答:1

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

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

字符串示例:

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
)
php
1个回答
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

希望这可以帮助! :)

© www.soinside.com 2019 - 2024. All rights reserved.