在标题中提取cookie数据

时间:2015-05-08 12:08:33

标签: php regex cookies http-headers preg-match-all

我有这个随机字符串。我只需要字符串中的特定文字,例如mcnb8h1apihg9ffav1ubtgal77Sat, 09-May-2015 11:49:58 GMT

$str = 'HTTP/1.1 302 Moved Temporarily Date: Fri, 08 May 2015 11:49:58 GMT Server: Apache/2.2.22 (Debian) X-Powered-By: PHP/5.5.23-1~dotdeb.1 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: OSTSESSID=mcnb8h1apihg9ffav1ubtgal77; expires=Sat, 09-May-2015 11:49:58 GMT; Max-Age=86400; path=/support/; domain=myweb.com; secure Location: index.php Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 HTTP/1.1 200 OK Date: Fri, 08 May 2015 11:49:58 GMT Server: Apache/2.2.22 (Debian) X-Powered-By: PHP/5.5.23-1~dotdeb.1 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Set-Cookie: OSTSESSID=sugrlug6sj8m27lrkv5id9v473; expires=Sat, 09-May-2015 11:49:58 GMT; Max-Age=86400; path=/support/; domain=myweb.com; secure Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8';

这个字符串是完全随机的。我尝试用以下方法解决它:

$pattern = "#OSTSESSID=(.*); expires=(.*)\n#";
preg_match_all($pattern, $str, $matches);

print_r($matches);

但没有奏效。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

你应该read up on Regex和你可以使用的各种操作符。

并使用https://regex101.com/作为排查问题的好地方。

您没有提供有关您的数据的更多信息, OSTSESSID 每次都是相同的长度,总是小写的字母数字?

如果我们这样假设,那么这里有一个提示/一半答案:

$pattern = "/OSTSESSID=([a-z0-9]{26});/";

希望这将有助于你完成其余工作。

答案 1 :(得分:1)

它不起作用的一个重要原因是你在。*上获得了一场贪婪的比赛

它试图匹配尽可能多的角色。在明星之后投掷一个问号使它不合适:

OSTSESSID =(?);期满=(。 ?;) (我也用分号终止了过期位 并且只是匹配片段:

OSTSESSID = mcnb8h1apihg9ffav1ubtgal77;到期=星期六,09-May-2015 11:49:58 GMT; 和 OSTSESSID = sugrlug6sj8m27lrkv5id9v473; expires =星期六,09-May-2015 11:49:58 GMT;