Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение данных Set-cookie 
V
    Опции темы
WolfON
  Дата 20.4.2007, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Есть:
Код

Set-Cookie: ljuniq=kx4JCds3nLgdl12:1177095531:pgstats0; expires=Tuesday, 19-Jun-2007 18:58:51 GMT; domain=.livejournal.com; path=/


Надо получить значение path и все переменные и их значения.

Для этого я сделал два регекспа:
Код

#получение path и информации внутри
/Set-Cookie:(.*)path=(.*)/

#получение перемнных и их значений
/([^;= ].*)=([^;].*);/siU


Это, конечно, работает, но хочется каким-то образом сделать один регексп, а следовательно окончательно разобраться как они формируются
PM MAIL ICQ   Вверх
Vaulter
Дата 21.4.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 1
Всего: 22



похорошему!
делается так!
ищется ПЕРВЫЙ :
отсекается (с проверкой без сохранением и т.д.)
explode(';', + 
foreach 
             list($varname, $varvalue) = explode('=',trim($str))

Добавлено через 1 минуту и 26 секунд
БЕЗ ВСЯКИХ РЕГЭКСП
уж поверь, я знаю что это такое, и успешно использую.
но в случае чего написал бы так smile мало ли, может пресс в 10000 хитов будет smile


--------------------
PM MAIL WWW ICQ   Вверх
WolfON
Дата 21.4.2007, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Тестирование показало, что время выполнения обычного кода: 0.67 * 10-4 сек, а кода с регекспом 1.25 * 10-4

Сделают по-обычному )

Но вопрос, про вложенность регекспа остается открытым
PM MAIL ICQ   Вверх
Vaulter
Дата 21.4.2007, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 1
Всего: 22



strtok еще в руку!
если не трудно, самому интересны результаты бенчмарка smile

а сосстна, так и оставить два регэспа smile 
ну....
в одной книжке мужик развивает тему до того, что по хорошему, надо бы тогда регэксп ВИДА
Код

preg_match_all("!Set-Cookie: ( (.*?) = (.*?); )+!iszm",$subject);

потом lookup получившийся массив


--------------------
PM MAIL WWW ICQ   Вверх
WolfON
Дата 21.4.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Код

$str = "Set-Cookie: param1=val1; param2=val2; path=/";
preg_match_all("/Set-Cookie: ((.*?)=(.*?);).* path=(.*?)+/is",$str, $res);
print_r($res);


Код

Array
(
    [0] => Array
        (
            [0] => Set-Cookie: param1=val1; param2=val2; path=
        )
    [1] => Array
        (
            [0] => param1=val1;
        )
    [2] => Array
        (
            [0] => param1
        )
    [3] => Array
        (
            [0] => val1
        )
    [4] => Array
        (
            [0] => 
        )
)


Значние в path такой регексп вообще игнорирует, а параметры массивом не делает =/
PM MAIL ICQ   Вверх
Vaulter
Дата 21.4.2007, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 1
Всего: 22



ну дык!
сами добавите где надо модификатор "?"
???  smile 


--------------------
PM MAIL WWW ICQ   Вверх
WolfON
Дата 22.4.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Ничонепонимаю  smile 
Давайте разберем регексп по полочкам, мб я что-то пойму )

Код

/Set-Cookie: ((.*?)=(.*?);)* path=(.*?)?/is


Разбираем:
Берем строку, заключенную в "Set-Cookie: " " path=", после может-быть любой набор символов (.*), составляющих слово(.*?), повторяющихся 0 или 1 раз (?)

Внутри этой строки - берем конструкцию, которая повторяется 0 и более раз (*)

Конструкция состоит из двух слов (.*?), разделенных знаком "=" и оканчивается ";"

Ко всему выражению применены модификаторы i - нечувствительность к регистру и s - метасимвол "." включает переносы строки

Звучит убедительно, или я не прав?
PM MAIL ICQ   Вверх
Vaulter
Дата 22.4.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 1
Всего: 22



звучит убедительно но знания частичны
читаем 
http://se.php.net/manual/ru/reference.pcre...tern.syntax.php
Цитата

?

    расширяет смысл мета символа '(' , квантификатор, означающий ноль либо одно вхождение,квантификатор жадности ( выделено мной)

то есть под паттерн 
к сожалению паттерн на проверку не рабоч.
и как я не колдовал заставить его стать онным не хватило терпения.

Добавлено через 13 секунд
звучит убедительно но знания частичны
читаем 
http://se.php.net/manual/ru/reference.pcre...tern.syntax.php
Цитата

?

    расширяет смысл мета символа '(' , квантификатор, означающий ноль либо одно вхождение,квантификатор жадности ( выделено мной)

то есть под паттерн 
к сожалению паттерн на проверку не рабоч.
и как я не колдовал заставить его стать онным не хватило терпения.



--------------------
PM MAIL WWW ICQ   Вверх
xolod
Дата 22.4.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 24.5.2005
Где: Когда: Что:

Репутация: 3
Всего: 13



У кук, между прочем, есть вполне себе официальный RFC. А регулярное выражение для правильного разбора и валидации еле-еле влезает в мой немаленький монитор :-).

Решить можно, например, так:
Код

$cookie_test = 'Set-Cookie: ljuniq=kx4JCds3nLgdl12:1177095531:pgstats0; expires=Tuesday, 19-Jun-2007 18:58:51 GMT; domain=.livejournal.com; path=/';

$cookie_pattern = '/(?:([^;,\s]+)(?:=)([^;]+)\;?)+?/i';
$cookie_mathes = array();
preg_match_all($cookie_pattern, $cookie_test, $cookie_matches);

echo('<pre>'.print_r($cookie_matches, true).'</pre>');


Это сообщение отредактировал(а) xolod - 22.4.2007, 20:58
PM MAIL   Вверх
WolfON
Дата 24.4.2007, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Понял свою ошибку - начал судить о всех куках по одному примеру, а зря )
Регексп интересный - просветляюсь )
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.