[Ruby] Помогите разобрать ..

Тим Алексеевский realtim на mail.ru
Вс Янв 30 20:37:22 MSK 2005


Vladimir Zdorovenco (Янв 30, 17:30):
> Не совсем понял про zero-width рег. выражения.. Если можно подробнее.
  См. http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UN

> Надо вытащить из то строки, ключ/значение вида:
> 
> КВ=[значение]; \w+=дата; \w+=путь
> [] - значит что может и небыть
> 
> строка состоит из этих вот КВ, т.е:
> 
> Set-Cookie=КВ, КВ, КВ
> 
> я думал так, проще всего 
> 
> myhdr = 'GMAIL_AT=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/,
> GMAIL_PREFS=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/, GV=;
> Domain=gmail.google.com; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/,
> GV=; Domain=gmail.google.com; Expires=Fri, 28-Jan-05 23:56:04 GMT;
> Path=/gmail, GX=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/gmail'
> 
> myhdr.split(/,/).each { |v|
>         puts v
> }
> 
> но получается билиберда потому-что автор net/http.rb делит запятой =)
> 
> Можно было в качестве разделителя успользовать  - ;; 
> 
> тогда такое могло сработать; собственно я так и сделал, поменял в
> net/htto.rb запятую на ;;
  Предлагаю так (как раз с использованием zero-width regexp-ов):
     myhdr.split(/, (?=\w+=)/)
  результат для этой строки:
  => ["GMAIL_AT=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/",
      "GMAIL_PREFS=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/",
      "GV=; Domain=gmail.google.com; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/",
      "GV=; Domain=gmail.google.com; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/gmail", 
      "GX=; Expires=Fri, 28-Jan-05 23:56:04 GMT; Path=/gmail"]


  Тим

-- 
++  If little else, the brain is an educational toy.  ++
                                                      --


Подробная информация о списке рассылки Ruby