IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Constitution d'un masque pour un lien [Fait] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut Constitution d'un masque pour un lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?
    $a ="<a>uuuioii</a>";
    $a = eregi_replace('(^<a>.*</a>$)', '', $texte);
    echo $a;
    ?>
    Comment faire pour récuperer ce qu'il y a entre deux choses definies ? La par exemple entre <a></a>
    En passant ou sont les tutos REGEX ?

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Salut,

    Il faut utiliser des masques de capture.
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $a ="<A>uuuioii</a>";
    $a = preg_replace('/((?i)<a>)(.*)((?i)<\/a>)/', "$2", $a);
    echo $a;
    ?>
    Avec preg_replace, l'option (?i) précise de ne pas tenir compte de la casse.
    Et le slash / étant un caractère spécial, il faut l'échapper.
    Enfin, pas besoin de préciser que la chaine commence et termine par ceci ou cela, l'essentiel est de récupérer le deuxième masque.

    Docs sur les regex :
    - http://www.phpinfo.net/page/archives/regex/
    - http://www.phpinfo.net/page/archives...gulieres-perl/
    - http://fr.php.net/manual/fr/referenc...ern.syntax.php

    P.S. : je préfère utiliser preg_replace, il parait qu'elle est plus performante...

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Elwyn
    En passant ou sont les tutos REGEX ?
    On peut citer celui-ci Les expressions régulières mais je doute que ce soit le seul sur dvp.

    Citation Envoyé par PseudoCoder
    Et le slash / étant un caractère spécial, il faut l'échapper.
    En choisissant judicieusement le délimiteur de l'expression vous ne seriez pas obligés de l'échapper. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $texte ="<A>uuuioii</a>";
    echo preg_replace('£<a>(.*)</a>£iU', "$2", $texte);
    ?>
    Le flag i (placé après le délimiteur, ici £) indique que la "recherche" est insensible à la casse (majuscules/minuscules) et U que l'expression est non gourmande (un texte tel que <a>1</a><a>2</a> vous donnera 1 et 2 avec cette option). Il est conseillé de privilégier la fonction preg_replace à ereg(i)_replace.


    Julp.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    Dans ton cas precis tu peut aussi essayé DOM

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Merci julp pour les infos.
    Je suis lin d'être un expert en regex... très loin... Je voulais juste donner un code qui fonctionne, pour avoir été confronté il y a peu à un problème similaire... Merci pour les précisions donc, qui permettent un code optimisé

    J'en profite pour une petite question... Dans l'exemple donné, le délimiteur qui est défini comme étant £... Comment est-il défini justement... ? Simplement du fait qu'il est utilisé à cet endroit de l'expression ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par PseudoCoder
    Comment est-il défini justement... ? Simplement du fait qu'il est utilisé à cet endroit de l'expression ?
    Oui, lol. C'est le premier caractère de l'expression régulière et il cherchera le même vers la fin d'expression (vers car il peut y avoir présence de flags : s, m, i, e, U, ...). On peut également utiliser d'autres délimiteurs notamment ceux qui ont la particularité d'être ouvrants/fermants (exemple : < et > dans preg_replace('<chat>i', 'chien', 'mon chat s'appelle Rex')) mais ils sont souvent un mauvais choix car ils figurent généralement dans l'expression régulière.


    Julp.

  7. #7
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Euh comprend plus la ! Expliquez moi la requete permettant de prendre qu'une partie d'une chaine Pas de la remplacer de la prendre juste Et pouvez vous m'expliquer pas à pas le deroulement de la requete

    Merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $texte ="<a>lien1</a><a>lien2</a>";
    preg_match_all('£<a>(.*)</a>£iU', $texte, $m);
    foreach ($m[1] as $v) {
    	echo $v . '<br/>';
    }
    ?>
    preg_match_all va chercher toutes les parties de la chaîne qui correspondent au motif donné et va placer les résultats sous forme de tableau dans la variable $m. Toutefois, ce tableau est multidimensionnel car le premier indice (numéroté 1) donne l'ensemble des chaînes correspondant à la première parenthèse capturante sous forme d'un tableau et ainsi de suite (utilisez print_r($m) pour visualiser la chose). C'est pourquoi, je le parcours ici avec foreach pour afficher tous les "liens" qui figurent dans la chaîne de départ.


    Julp.

  9. #9
    Membre éclairé Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Points : 783
    Points
    783
    Par défaut
    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Menu généré] Changer la frame de dest pour 1 lien
    Par Nicos77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/11/2005, 15h17
  2. Edition de masque pour les TMaskEdit
    Par bakaneko dans le forum C++Builder
    Réponses: 1
    Dernier message: 30/08/2005, 18h09
  3. Réponses: 2
    Dernier message: 14/03/2005, 19h55
  4. Des classes pour les liens en CSS
    Par Invité dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 08/03/2005, 14h31
  5. [JtextField]Creer un masque pour Ip
    Par bibx dans le forum Composants
    Réponses: 8
    Dernier message: 11/01/2005, 17h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo