寻求帮助从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
)
你正在寻找的正则表达式是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。
希望这可以帮助! :)