Шаблон регулярного выражения для извлечения значения PHPSESSID из строки

У меня есть некоторые проблемы с preg_match(),
Я использовал этот код (и раньше он работал довольно хорошо):

preg_match("/PHPSESSID=(.*?)(?:;|\r\n)/", $code, $phpsessid);

но теперь это больше не работает. (возвращает пустой массив).

Моя тема: HTTP/1.1 302 Moved Temporarily Server: nginx/1.8.0 Date: Wed, 24 May 2017 08:58:57 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.10-1ubuntu3.18 Set-Cookie: PHPSESSID=jrq8446q91fv6eme2ois3lpl07; expires=Thu, 24-May-2018 08:58:57 GMT; path=/; Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Cache-Control: no-store, no-cache, must-revalidate Location: index.php
*

Мне нужно получить значение PHPSESSID: jrq8446q91fv6eme2ois3lpl07

Спасибо за ваши ответы.

0

Решение

Попробуйте не группировать? с (. *) так:

preg_match("/PHPSESSID=(.*)?(:;|\r\n)?/", $code, $phpsessid);
0

Другие решения

Как насчет http://www.php.net/session_id ?

$ sessionid = session_id ();

/ Lasse

0

Учитывая входную строку ОП …

Образец ОП работает Образец Демо (131 шаг)

В настоящее время принят ответ некорректный — это наверняка запутает будущих читателей. Образец Демо

Но давайте удостоверимся, что вы используете самый эффективный, самый короткий, самый лучший шаблон …

/PHPSESSID=\K[a-z\d]*/  #no capture group, 23 steps (accurate for sample input)
/PHPSESSID=\K[^;]*/     #no capture group, 23 steps (accurate for sample input)
/PHPSESSID=\K\w*/       #no capture group, 23 steps (not inaccurate, includes underscores)

Если вы ожидаете увидеть \r или же \n в качестве возможного разделителя для значения PHPSESSID вы можете добавить эти символы в «класс отрицательных символов» следующим образом: [^;\r\n] (он все еще будет работать в 23 шага) Образец Демо

Входные данные:

$subject='HTTP/1.1 302 Moved Temporarily Server: nginx/1.8.0 Date: Wed, 24 May 2017 08:58:57 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive X-Powered-By: PHP/5.3.10-1ubuntu3.18 Set-Cookie: PHPSESSID=jrq8446q91fv6eme2ois3lpl07; expires=Thu, 24-May-2018 08:58:57 GMT; path=/; Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Cache-Control: no-store, no-cache, must-revalidate Location: index.php
*';

Однострочный метод (PHP Demo):

echo preg_match('/PHPSESSID=\K[^;\r\n]*/',$subject,$out)?$out[0]:'';

Выход:

jrq8446q91fv6eme2ois3lpl07

Обратите внимание, что с помощью \K нет необходимости использовать группу захвата, это уменьшает размер выходного массива на 50%. Я надеюсь, что эти лучшие практики будут полезны для будущих читателей.

0
По вопросам рекламы [email protected]