Problème avec une Regex

ViPHP
ViPHP | 2287 Messages

09 mars 2012, 18:46

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 :wink:

Merci à vous deux.
De courtoisie seulement, pas de respect. ploupy (dont je salue ici la persévérance) a donné plus de code que toi, ce qui est sympa de sa part et un peu paradoxal aussi. C'est juste que sa dernière suggestion était bonne (et originale) et méritait peut être un peu + de recherche de ta part ;) (Et si ton test, dont nous ne savons rien, ne donnait pas satisfaction ça aurait été bien de montrer le code du test par exemple qu'on puisse éventuellement rectifier, tester, débattre...). C'est pour cela que j'ai apporté mon crédit à son idée en t'expliquant pourquoi tu devrais y regarder une deuxième fois selon moi, ce qui t'a été montré d'une autre manière par sirakawa depuis.

La précision et l'efficacité d'une regexp dépendent beaucoup de la manière dont sont exprimées les contraintes (ce qui aide d'ailleurs à son écriture), et aussi l'exhaustivité du jeu de données de test (sinon il faut s'y reprendre à plusieurs fois, par essai et erreurs successives, et sur un forum ça peut être lourd), deux points sur lesquels ton post était plutôt vague. C'est sans doute à cause de cela que tu ne t'en es pas sorti tout seul. parse_str() te soulage de ce problème à bon compte, c'est pas si mal non ? ;)

EDIT:
Je suis sûr que c'est possible avec une simple ligne en regex, mais bon...
Ça l'est, je te le confirme, mais pour éviter des aller/retours il faudrait définir plus précisément les différents cas à traiter pour que le motif les prenne bien en compte. Ma dernière question (page toujours au début ou pas ?) allait dans ce sens, on peut toujours poursuivre dans cette direction tous les deux si tu le souhaites :)


@+ :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Mammouth du PHP | 2278 Messages

09 mars 2012, 19:01

Dans la mesure, où ton expression comporte deux parties dont l'une, commençant au point d'interrogation, contient elle-même un nombre imprévisible de sous-parties commençant par &, il est vraisemblable que la regex soit d'une forme:
((recherche et extraction de la partie commençant par ? (recherche de la partie commençant par ? et finissant par #)( recherche et extraction des parties commençant par #)))
ce n'est pas forcément plus simple que l'appel des fonctions de PHP prévues pour ça. C'est une grossière illusion de croire que, parce ton expression ne pend qu'une ligne, elle est plus rapide que plusieurs lignes; entre autres, sur ce point précis, parce que la solution regex va appeler le moteur regex de PHP, qui va devoir interpréter ton expression, quand les solutions PHP sont déja rédigées et compilées, et, je pense, optimisées.
extrait du manuel sur preg_split:
"Si vous n'avez pas besoin de la puissance des expressions régulières, vous pouvez choisir des alternatives plus rapides (quoique plus simples) comme explode() ou str_split(). "
____
Comme je suis la reine des poires, voici un début assez prometteur:
$val = "http://toyo.com?page=3798&sujet='lotion capillaire'&prix='712€'";
$vals = preg_split ('/\?/', $val, -1);
print_r ($vals);
La suite, évidente, ne devrait poser aucun problème à un regexmaniaque
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD