寻求帮助以提取从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
)
答案 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 。
希望这有帮助! :)