Page 1 sur 2
Problème avec une Regex
Posté : 07 mars 2012, 19:04
par CyberTaf
Bonjour,
Je cherche à traiter une URL dans laquelle il y a une variable obligatoire '?page=blablabla', mais qui peut être suivie d'une ou plusieurs autres variables.
Mon but c'est d'obtenir uniquement la valeur de la variable 'page', soit 'blablabla'.
J'ai fait plusieurs Regex :
... mais je n'arrive pas à m'en sortir.
Un petit coup de main serait le bienvenue

Merci
Re: Problème avec une Regex
Posté : 07 mars 2012, 22:49
par ploupy
je suis débutant mais ça marche pas ça ?
$page = $_GET['page'];
echo $page;
Re: Problème avec une Regex
Posté : 07 mars 2012, 22:55
par CyberTaf
Si ça marcherait. Mais dans le cas présent, les URL sont stockée en BDD avec $_SERVER['REQUEST_URI'], donc avec les variables, et c'est sur ce qui est stocké en BDD que je dois travailler.
Re: Problème avec une Regex
Posté : 07 mars 2012, 23:01
par ploupy
a ok.
alors toi tu dois savoir moi je connais pas trop ces fonctions mais il me semble que tu peux faire des sélection dans une chaine.
genre right($vaariable) a partir du ?
et ensuite un un left ($variable a partir de la prochaine lettre.
de façon a ce que tu récupéré la variable.
désolé je connais pas trop ces fonctions mais tu vois ce que je veux dire ??
Re: Problème avec une Regex
Posté : 07 mars 2012, 23:05
par ploupy
je viens de trouver une fonction ( qui ne resou pas ton probleme mais qui te montre un exemple de travail sur une chaine
$TaVarableURL = ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)",
"<a href=\"\\0\">\\2</a>",$TaVarableURL);
à chercher Les fonctions de manipulation d'expressions régulières
Re: Problème avec une Regex
Posté : 07 mars 2012, 23:14
par CyberTaf
Merci, mais en fait je sais à peu près comment on fait pour travailler sur une chaîne.
Là ou je bute, c'est sur la condition d'une seconde variable, donc la détection d'un ou plusieurs '&' dans l'URL et la non prise en compte de celles-ci.
Je pense qu'il faut mettre en "option" le '&' dans l'URL avec un ? ou un *, mais c'est là que je cale...

Re: Problème avec une Regex
Posté : 07 mars 2012, 23:55
par ploupy
il te suffit de recherche dans ton url avecs ces fonctions l' expression qui se trouve entre ?page= et ?
si il peut y avoir *, tu remplace tous les * par ? avant....
non ??
peut tu donner quelques exemple d'autre URL que tu as pour voir si cela fonctionne
je crois savoir ton soucis enfgin dit moi si je me trompe :
$url = preg_replace('#\/\?page=(.+)&(.+)?#i', '$1', $url);
dedans tu as mis un ? ord je crois qu'il a une fonction precise lors des expressions régulières donc faut pas que le mettre en tant q'expression enfin je sais pas
Re: Problème avec une Regex
Posté : 08 mars 2012, 00:06
par CyberTaf
Je crois que tu n'a pas compris ce que je veux dire.
Dans une url avec des variables, il y a un '?' pour indiquer la première variable et des '&' pour les suivantes.
La Regex doit fonctionner avec 0,1 ou plusieurs variables dans l'url.
Code : Tout sélectionner
?page=blablabla
?page=blablabla&a=a
?page=blablabla&a=a&b=b
?page=blablabla&a=a&b=b&c=c
etc...
Quand je parle de ? ou de * c'est dans la Regex

Pour indiquer la présence éventuelle et la répétition de variables.
Le but final étant de ne récupérer que 'blablabla'.
Re: Problème avec une Regex
Posté : 08 mars 2012, 00:21
par ploupy
void parse_str ( $url [, array &$arr ] );
exemple :
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
?>
ça à l'air sympas cette fonction, ca te retrouve toutes les variables de ta chaine et ca te les recrres automatiquement,
je sais pas si l'ecriture est bonne mais bon à tester !!
Re: Problème avec une Regex
Posté : 08 mars 2012, 00:27
par CyberTaf
parse_url() serait plus approprié dans ce cas-là
Mais ça ne m'avance pas car ça renvoie les même valeur de variables que $_SERVER['REQUEST_URI']
Merci d'essayer de maider

Re: Problème avec une Regex
Posté : 08 mars 2012, 23:20
par CyberTaf
Je fais un petit up au cas où une bonne âme experte en regex passerait par là

Re: Problème avec une Regex
Posté : 09 mars 2012, 13:36
par Calimero
Hello,
En fait il serait bon que tu expliques en quoi la dernière suggestion de ploupy ne convient pas : c'est peut-être pas une regexp, mais ça a l'air de faire tout le travail de parsing que tu désires mieux qu'une regexp, donc je vois pas trop... C'est aussi par courtoisie par rapport à lui qui a pris le temps de s'intéresser à ton problème et de te faire des propositions.
Si vraiment ça ne va pas, on verra pour ta regexp si tu fournis un vrai jeu de test (Celui que tu as donné plus haut semble trop parfait : la variable est toujours la première, on ne sait pas si la chaîne est complète, etc...).
Re: Problème avec une Regex
Posté : 09 mars 2012, 14:19
par CyberTaf
Hello,
Je ne vois pas en quoi j'ai manqué de respect à
ploupy à qui j'ai répondu à chaque fois, et que j'ai remercié de prendre le temps de m'aider.
Comme expliqué plus haut, j'ai déjà fait le test avec parse_url(); , ce qui me renvoie exactement la même chose que ce que j'ai stocké avec $_SERVER['REQUEST_URI'];
Quand au jeu de test, c'est bien celui que j'ai fourni : la première variable est toujours 'page', et elle peut être suivie d'aucune, 1, 2 ou plusieurs autres variables.
Bon enfin c'est pas dramatique tout ça hein, ya plus grave
Merci à vous deux.
Re: Problème avec une Regex
Posté : 09 mars 2012, 14:25
par sirakawa
Les interventions successives m'ont suggéré une solution plus simple que celle que j'utilisais à un problème du même genre:
1) parse_url fait parfaitement l'affaire, si on prend la peine de lire la doc et d'essayer les constantes répertoriées sous COMPONENT.
2) parse_str fait le reste.
<?PHP
$chaine = "http://www.dingo.zn/index.html?truc='machin'&chose=1&bidule='lalala'";
$query = parse_url($chaine, PHP_URL_QUERY);
$t_query = explode("&", $query);
/* ma méthode archéologique */
$t_final = array();
foreach ($t_query as $var)
{
$t_variable = explode("=", $var);
$nom = $t_variable[0];
$val = $t_variable[1];
$t_final[$nom] = $val;
}
print "avec la boucle";
print_r($t_final);
print "<hr> avec parse_str et deuxième paramètre";
parse_str($query, $tableau);
print_r($tableau);
print "la variable truc n'existe pas";
print "<hr> avec parse_str sans deuxième paramètre ";
parse_str($query);
print "la variable truc vaut $truc";
?>
et merci à ceux qui m'ont donné l'idée d'y replonger mon nez...
Re: Problème avec une Regex
Posté : 09 mars 2012, 15:00
par CyberTaf
Bon et bien je vais me débrouiller avec tout ça alors.
Je suis sûr que c'est possible avec une simple ligne en regex, mais bon...
Merci à vous tous en tout cas.