preg_match toute simple mais blocage...

Discussion dans 'Référencement Google' créé par lambi521, 16 Décembre 2011.

  1. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Bonjour à tous,

    Pour rediriger mes mauvaises URLs vers mes URLs SEO, j'utilise une fonction preg_match mais je n'arrive pas à la faire fonctionner, si quelqu'un parmis vous peut m'aider :)

    Mes URLs sont de la forme :
    blablabla-blabla-blabla-21_52.html (réécrites)
    index.php?cPath=21_52 (non réécrites)

    Ce que je veux c'est identifier le dernier $category_id du cPath (après je sais redirigé en 301 vers la bonne page)

    J'ai fait ceci :
    Code:
    preg_match("([0-9]{1,3})\_{0}", $_GET['cPath'], $matchs); ou bien
    preg_match("([0-9]{1,3})[^_]", $_GET['cPath'], $matchs)
    Pour trouver le dernier nombre composé de 1, 2 ou 3 chiffres dans le cPath. Et pour être sûr que c'est le dernier, j'ai testé qu'il n'y ai pas de "_" après ce chiffre, mais ça ne marche pas. Dans cet exemple je voudrais que ça me retourne "52". Il y a surement un meilleur moyen ?
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    je comprend pas bien pourquoi le preg_match.

    Ta variable $_GET['cPath'] contient quoi et tu veux obtenir quoi ?
     
  3. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    $nombre = ereg_replace("^.*_","",$_GET['cPath']);
     
  4. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Merci pour la réponse !

    Ma variable cPath contient le chemin de la catégorie courante, par exemple :
    catégorie_souscatégories_sousouscatégories = 21_52_103

    Moi je veux récupérer l'id de la catégorie la plus loin dans le cPath, celle vers laquelle on veut se diriger en fait. Par exemple là ça doit me retourner "103". Le problème c'est que dans mon URL si on tape un "faux" cPath, par exemple 12000_99999_103, le site affiche tout de même la catégorie 103, ce qui fait qu'il y a DC puisque plusieurs URLs !

    Une fois l'id de la categ courante identifié dans le cPath, je reconstruit celui-ci comme il faut pour redirigé en 301 vers la bonne URL.

    Peut-tu expliquer ta fonction ?
     
  5. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    ereg_replace effectue un remplacement dans une variable par une expression de substitution via un regex.

    * le regex est ici ^.*_ Litéralement c'est : depuis le début de la chaine de caractére (^), tout ce que tu trouve (.*) avant d'atteindre le caractère souligné (_)
    * l'expression de substitution est une chaine vide ""
    * et la variable sur laquelle ça agi est ta GET

    donc au final dans l'exemple tu devrais récupérer le dernier chiffre dans $nombre.

    ça c'est un autre souci.

    pour que tu valide ou pas l'action il faut effectivement faire un preg match du genre :

    preg_match("|[0-9]{1,3}_[0-9]{1,3}_[0-9]{1,3}$|", $_GET['cPath'], $matchs)

    devrait être true si c'est ton url foireuse.
     
  6. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Si je comprend bien ton explication, la fonction s'arrête au "_" sauf que si mon URL est aaaaaaaaaaaaaaa-21_52_103.html, il va s'arrêter au 1er "_" et me retourner 52_103, ça n'est pas ce que je veux.

    Par ailleurs j'aimerais utiliser preg_match, ma proposition dans mon 1er post doit fonctionner si quelqu'un sait comment dire "sans underscore derrière" en langage expression régulière

    Une fois que j'ai réussi à récupérer la dernier id du cPath c'est bon, je sais tester et redirigé vers la bonne URL en cas de différence à coup sûr

    C'est si compliqué que ça ???
     
  7. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    Tu as essayé au moins ? ... non ... (la je te fais les question ET les réponses) car si tu l'avais fait tu aurais vu que ça te renvoie ce que tu cherche. Bref...
    Quand tu pose une question soit précis et complet le code c'est pas de l'approximatif.
    Voila que tu sort un ".html" de ton chapeau pour justifier je sais pas quoi mais du coup ça renvoie pas "103" mais 103.html (logique)

    preg_match c'est surtout pratique pour tester la validité au travers d'un pattern c'est pas spécialement adapté pour transformer une donnée dans un contenu. Donc si tu veux tester la possible DC et avoir l'ID il est possible que tu doive passer par deux opérations.

    ça dépend souvent de comment on pose le problème de plus il est inutile d'ouvrir 40 sujet a la suite pour le même problème.
     
  8. Supermaury
    Supermaury WRInaute discret
    Inscrit:
    25 Mars 2009
    Messages:
    144
    J'aime reçus:
    5
    Peut-être un début de solution (mais j'avoue je suis une quiche en PHP / Expression régulière).

    Essaie ça, j'ai testé en local et ça semble fonctionner :

    Code:
    <?php
    $subject = "index.php?cPath=222-21_33_555";
    $pattern = '/[1-9]*$/i';
    preg_match($pattern, $subject, $matches);
    print_r($matches);
    ?>
    
    @++
     
  9. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    Je ne cherche rien à justifier, la preuve le .html que tu découvres est dans le 1er post :
    Code:
    Mes URLs sont de la forme :
    blablabla-blabla-blabla-21_52.html (réécrites)
    index.php?cPath=21_52 (non réécrites)
    Et d'autre par, je connais un petit peu le PHP (ironie) et je n'ai pas besoin de tester pour savoir que ta fonction ne me conviens pas étant donné qu'elle s'arrête au 1er "_" et que c'est justement le piège à éviter, d'où mon post ici.
    De plus, le .html ne fait pas partie du cPatch qui est :
    C'est pour cela que j'ai rééxpliqué plus succinctement dans un 2ème topic, vu qu’apparemment j'avais mal expliqué la 1ère fois. Merci quand même pour ton aide.

    Je vais tester ta solution Supermaury, je crois que c'est ce "i" que je cherchais. Je fais un retour dès que c'est OK.
     
  10. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
  11. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    C'est résolu donc pas de souci mais tu raconte une bêtise quand même :
    ^.*_
    Tout jusqu'au "_" depuis le début donc jusqu'au dernier puisque "_" fait parti de "tout", ou alors le php sur mes serveurs fonctionne pas comme le tiens car moi j'ai vérifié. :wink:
     
  12. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 463
    J'aime reçus:
    0
    @zeb exact ! Pwa désolé, je l'avais mal comprise, j'ai vraiment besoin de vacances ! En + j'ai du mal avec les expressions régulières, à part les vraiment basiques où je m'en sors mais le reste c'est la cata ! Ta fonction fonctionne sauf si il n'y a pas de "_" dans le cPath, comme dans les catégories mères, donc je garde la solution de Spout !

    Au plaisir de t'aider prochainement :)
     
  13. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 024
    J'aime reçus:
    1
    Lol moi aussi mais c'est bientôt le cas il me semble. On va pouvoir se refaire une santé a coup de dinde au marron :wink: (en vérité j'aime pas la dinde mais bon, les repas de familles n'ont pas que du mauvais puisqu'on tape dans la cave a l'occasion)
     
Chargement...
Similar Threads - preg_match simple blocage Forum Date
Problème de preg_match(). Développement d'un site Web ou d'une appli mobile 15 Mai 2020
Preg_match et bobo à la tête :) Développement d'un site Web ou d'une appli mobile 28 Janvier 2013
preg_match d'un lien href Débuter en référencement 16 Novembre 2010
preg_match_all et cellule d'un tableau Développement d'un site Web ou d'une appli mobile 28 Mai 2010
Utilisation preg_match URL Rewriting et .htaccess 30 Mars 2010
PREG_MATCH Développement d'un site Web ou d'une appli mobile 5 Février 2009
Demande d'aide pour expression régulière et preg_match_all Développement d'un site Web ou d'une appli mobile 16 Octobre 2008
Warning: preg_match() [function.preg-match]: Développement d'un site Web ou d'une appli mobile 22 Août 2008
[résolu] Preg_match et récupération du nom de la page Développement d'un site Web ou d'une appli mobile 16 Juin 2008
Q° expression rationnelle (preg_match) [je suis bloqué] Développement d'un site Web ou d'une appli mobile 2 Mars 2008
regex preg_match Développement d'un site Web ou d'une appli mobile 8 Octobre 2007
PHP - preg_match_all() et expressions regulieres Développement d'un site Web ou d'une appli mobile 24 Août 2007
Question expressions régulières preg_match_all PHP Développement d'un site Web ou d'une appli mobile 19 Août 2007
preg_match synthaxe bien compliqué à comprendre !!! Administration d'un site Web 5 Juillet 2007
Une recherche dans une variable avec un preg_match(); URL Rewriting et .htaccess 12 Mai 2006
preg_match() & strpos() Développement d'un site Web ou d'une appli mobile 28 Avril 2006
Mon preg_match est-il correcte syntaxiquement ?! URL Rewriting et .htaccess 2 Avril 2006
Preg_match -> objectif bbcode ! Développement d'un site Web ou d'une appli mobile 15 Décembre 2005
preg_match... Développement d'un site Web ou d'une appli mobile 10 Décembre 2005
definition d'un preg_match Développement d'un site Web ou d'une appli mobile 27 Octobre 2005