Regex, encore eux...

Petit nouveau ! | 4 Messages

16 août 2010, 08:44

Bonjour tout le monde!

J'ai actuellement un petit problème, et ca fait des heures que je suis dessus, sans arriver à le résoudre... ^^

Je souhaite rechercher une chaine dans un lien (en fait l'adresse elle-meme), et la remplacer par un # et un complément onclick()... La chaine à rechercher est du genre "?p=xxxx&aaaa=z".

Donc les seuls éléments dont je connais à coup sur, c'est : "?p=", et 0 ou plusieurs "&". Ce qui suit immédiatement le "?p=" pourrait aussi être connu facilement, mais ca serait pour intégrer sur plusieurs pages sans tout modifier... ^^

Pour le moment, j'ai sorti ca comme code, mais ca ne semble pas fonctionner, et je sais pas trop pourquoi... :(

Code : Tout sélectionner

"/^(\?p=[a-z]{1,})(&{1}[a-z]{1,}={1}[0-9]{1,}){1,}(\">)/"
je me creuse vraiment la tete, et je dois dire que les regex m'ont toujours posé problèmes... ^^ J'espère que vous pourrez m'aider... ^^

Petit nouveau ! | 4 Messages

16 août 2010, 08:54

Bon... eux... à première vue, je viens de trouver! Et dire que ca fait... 4h min que je me creuse la tete!!!!

Code : Tout sélectionner

"/(\?p=[a-z]{1,})(&{1}[a-z]{1,}={1}[0-9]{1,}){1,}(\">)/"
Vous remarquerez que la seule différence, se situe au niveau du "^"... Et voilà ce qui m'empecher réussir mon histoire... :roll:

Bon, désolé pour le dérangement... ^^

ViPHP
ViPHP | 3607 Messages

16 août 2010, 10:54

Bonjour,
As-tu compris la raison de ton erreur de départ?
Cela vient du fait que le "^" audébut de la regexp indique que le pattern doit être trouvé au tout début de la chaine, donc dans ton cas, vu qu'a priori tu prends l'url entière, c'est tout à fait normal qu'il ne trouve pas de ?p= au début ;)

Petits liens utiles:
http://www.lumadis.be/regex/tuto_pcre.php (tuto)
http://www.lumadis.be/regex/test_regex.php?lang=fr (testeur)

ViPHP
ViPHP | 5462 Messages

16 août 2010, 15:07

c'est un rechercher remplacer que tu fais ? ou ca dois etre dynamique sur une page ?

Petit nouveau ! | 4 Messages

17 août 2010, 10:17

en effet, après la trouvaille d'erreur, j'ai "analysé" le pourquoi du comment et je suis arrivé à ca... Ca reste que mon "?p..." se situe au début de la chaine à rechercher, mais pas de l'ensemble... ^^

Ensuite, il faut que ce soit dynamique... La première variable (p) pourrait être fixe sur la page, mais comme je vais l'intégrer sur plusieurs pages, et que ca suit une fonction qui retourne le lien formater, avec toutes les variables précédentes...

En fait, pour mettre dans le contexte... J'utilise ce script sur une page qui permet entre autre une recherche d'un terme dans la base de donnée, et le script "complet" a pour but d'afficher plusieurs pages différentes, mais d'avoir toujours le mot de recherche de transmis... Je sais pas si vous me suivez, alors prenons l'ex. suivant:

Vous arrivez sur ma page, et vous souhaitez chercher "homme", la page sera affichée avec 20 résultats, mais il y en a 50... (donc 2 pages sont encore à voir)

Hormis en passant le critère de recherche par l'url (mais pas très esthétique, et pas des plus simples, surtout que ca peut être long... ^^), il reste de le faire passer par POST... Mais pour continuer sur le résultat de recherche, il me faut au min. la variable "p" puis une autre qui indique que c'est en recherche, d'ou mon lien dynamique (car la fonction retourne également les liens dans un cas ou ce n'est pas une recherche, et je me casse beaucoup moins la tete.... ^^)

Ceci dit, j'avance maintenant, grâce à ce REGEX enfin résolu... ^^

PS: merci pour le lien du tester! Je le mets au chaud, car je sens qu'il me sera très utile! :)

Mammouth du PHP | 1511 Messages

17 août 2010, 11:27

Pourquoi ne pas récuperer le tableau $_GET, et reconstituer la chaine tout simplement ?
$queryArgSeparator = '&';
$out = array();
foreach($_GET as $k => $v) {
    $out[] = "$k=$v";
}
$out = implode($queryArgSeparator, $out);

echo '<a href="#' . $out . '" onlick="mafonctionjavascript(this.href)">Clic !</a>';