Extraire les paramètres d'une url sous la forme d'une string

Bonjour,

J’ai une string telle que :
string = “http://www.ruby-lang.org/test?valeur1=ok&valeur2=non

Et j’aimerais pouvoir récupérer la valeur associée à valeur1 ou
valeur2 (ok ou non) (ce qui reviendrait à faire params[:valeur1] dans
Rails.

Existe-t-il un moyen de faire cela ? J’ai cherché du côté de uri
(http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/index.html) mais je
n’ai pas trouvé… (sauf à utiliser une expression régulière)

Je vous remercie par avance,

Pierre

Une bête regex le fera très bien :
/^.valeur2=([^&])(?:&.*)?$/

Ensuite il suffit d’utiliser la méthode gsub de string :
ta_chaine_a_depouiller.gsub(/^.valeur2=([^&])(?:&.*)?$/, ‘$1’)


Michel B.

Pierre V. a écrit :

Bonjour,

J’ai une string telle que :
string = “http://www.ruby-lang.org/test?valeur1=ok&valeur2=non

Et j’aimerais pouvoir récupérer la valeur associée à valeur1 ou
valeur2 (ok ou non) (ce qui reviendrait à faire params[:valeur1] dans
Rails.
On peut faire bourrin ?

h = {}
URI.parse(string).query.split(‘&’).map do |a| b, c = a.split(‘=’);
h[b.to_sym] = c; end


Martin C.
http://www.noremember.org | http://www.synbioz.com

Le 23 septembre 2008 15:23, Pierre a écrit :

J’ai une string telle que :
string = “http://www.ruby-lang.org/test?valeur1=ok&valeur2=non

Et j’aimerais pouvoir récupérer la valeur associée à valeur1 ou
valeur2 (ok ou non) (ce qui reviendrait à faire params[:valeur1] dans
Rails.

Passe par ActionController::AbstractRequest.parse_query_parameters.

– Jean-François.


http://twitter.com/underflow_

merci
en corrigeant :
ta_chaine_a_depouiller.gsub(/^.valeur2=([^&])(?:&.*)?$/, $1) l’autre
ne marche pas chez moi :wink:

On Sep 23, 3:29 pm, “Michel B.” [email protected]

en corrigeant :
ta_chaine_a_depouiller.gsub(/^.valeur2=([^&])(?:&.*)?$/, $1) l’autre
ne marche pas chez moi :wink:

C’est comme le code des pirates, c’est plus un genre de direction
générale…


Michel B.

Les pirates sont de retours :slight_smile:

J’ai utilisé un petit mix finalement :
ActionController::AbstractRequest.parse_query_parameters(URI.parse(url).query)
[‘valeur’]

Merci à tous !

On Sep 23, 3:51 pm, “Michel B.” [email protected]

This pastie demonstrates GC optimization with query parsing as an
example:

http://pastie.org/278425

Someone may find it useful.

On 24 sep, 11:17, Oleg A. [email protected] wrote:

This pastie demonstrates GC optimization with query parsing as an
example:

http://pastie.org/278425

Someone may find it useful.

Très bon exemple mais personnellement je n’utiliserais pas Chash dans
le inject(Chash), le memory leak/bug n’est pas loin:

A.parse_query(‘a=1&name=oleg&place=france&x=1’)
=> {“place”=>“france”, “name”=>“oleg”, “a”=>“1”, “x”=>“1”}
A::Chash
=> {“place”=>“france”, “name”=>“oleg”, “a”=>“1”, “x”=>“1”}

En particulier le rescue Chash va sortir des résultats imprévisibles
du cas précédent.

Non ?

On Sep 24, 2:49Â pm, “Renaud (Nel) Morvan” [email protected]
wrote:

A::Chash

=> {“place”=>“france”, “name”=>“oleg”, “a”=>“1”, “x”=>“1”}

Oops. My fault!

Here’s the fixed version:
http://pastie.org/278558

The difference is smaller, but still visible.