Bas*_*sic 1 php regex curl preg-match
我正在使用PHP/CURL来自动化两个紧密相关的代码点火器之间的调用.
代码点火器返回两个set-cookie
标头,一个用于具有真实会话数据的安全cookie,一个用于具有空会话的不安全连接...
Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path=/
Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
Run Code Online (Sandbox Code Playgroud)
我一直在尝试解析安全cookie(两个站点都在同一个域上,所以如果我通过CURL获得更新的会话信息,我应该更新客户端cookie,就像他们直接拨打电话一样)
我目前正在使用以下内容来解析cookie:
preg_match('/Set-Cookie: (.*)\b/', $Head, $Cookies);
Run Code Online (Sandbox Code Playgroud)
这给了我$Cookies
:
Array
(
[0] => Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
)
Run Code Online (Sandbox Code Playgroud)
但这只匹配第一个set-cookie标头.我的正则表达能力很差 - 如何匹配第二个标题?
假设$Head
是包含所有cookie头的单个字符串,那么您正在寻找preg_match_all()
.preg_match()
找到第一场比赛后停止.
用preg_match_all()
,匹配的整个字符串将在$Cookies[0]
.您的子模式匹配将在$Cookies[1]
.
$Head = <<<HEAD
Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path=/
Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
HEAD;
preg_match_all('/Set-Cookie: (.*)\b/', $Head, $Cookies);
print_r($Cookies);
Run Code Online (Sandbox Code Playgroud)
产量
Array
(
[0] => Array
(
[0] => Set-Cookie: overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => Set-Cookie: overshare=BdHJPVt...STsCxnMBj; path=/; secure
)
[1] => Array
(
[0] => overshare=a%3A0%3A%7B%7D; expires=Thu, 17-Jun-2010 05:09:32 GMT; path
[1] => overshare=BdHJPVt...STsCxnMBj; path=/; secure
)
)
Run Code Online (Sandbox Code Playgroud)
此外,(.*)
默认情况下,您的通配符是贪婪的,因此如果标题不在单独的行上,它可能会同时使用两个字符串.如果是这样,试着(.*?)
让它不合适.