繁体   English   中英

提取所有以特定字符开始并设置长度的子字符串

[英]extract all substring occurances starting with certain character with set length

寻求帮助以提取所有从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
)

可以看到在这里工作。

希望这可以帮助! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM