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 :

Une option pour ne pas retourner la chaine principale


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut Une option pour ne pas retourner la chaine principale
    bonjour,

    je souhaite extraire du texte avec une regexp du type:

    #<img class="photo" src="(.*)">#

    je ne veux donc récupérer que la source de l'image, pas la chaine entière. Ca n'est pas tres genant, ... mais un peu quand meme et je me dit que je ne suis pas le premier à avoir ce genre de probleme, donc est-ce que vous connaitriez une option pour ne pas retourner la chaine entiere. merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $reg='#<img class="photo" src="(.*)">#';
    $chaine='<img class="photo" src="repertoire/sousrep/images.jpg">';
    preg_match_all($reg,$chaine,$res);
    echo $res[1][0];
    ?>
    $res[1] retourne l'array des matches du premier groupe de parenthèse
    et le 0 le premier element de cet array
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    $res[1] retourne l'array des matches du premier groupe de parenthèse
    et le 0 le premier element de cet array
    merci pour ta reponse, mais c'est justement ça que je ne veux pas, je voudrais n'avoir que la partie à l'intérieur, ici le chemin de l'image

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    heu tu as testé le code fourni ???

    il fait quoi comme echo ??????

    a ton avis le premier élément de l'array c'est quoi ????
    ce serait magique si c'etait le src non ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    à vrai dire, non j'ai pas testé mais ce que je cherche, c'est un truc du genre:

    preg_match(#src=(.*)#O,$src,$ret);

    avec O une option pour ne pas enregistrer la chaine principale dans $ret et ainsi avoir directement : $ret == "chemin de l'image"

    mais j'avoue que ca n'est pas très long d'ajouter :
    $chemin_image= $ret[1];

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    Ben tu peux faire un truc comme ça si tu veux mais bon, le problème est toujours le même, je vois pas vraiment comment tu pourrais faire $ret = alors qu'on te renvoie forcément un tableau mais bon, là tu n'as qu'une clé à mettre si tu veux et la regex est (certes très légèrement) plus optimisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	$chaine = '<img class="photo" src="repertoire/sousrep/images.jpg">';
    	preg_match('#<img class="photo" src="([^"]*)">#', $chaine, $arr);
    	echo $arr[1];

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par gael Voir le message
    mais j'avoue que ca n'est pas très long d'ajouter :
    $chemin_image= $ret[1];
    Et c'est surtout beaucoup plus parlant qu'une option exotique.
    Devil is in the details !
    Quant à la performance, je ne serais pas étonné qu'un éventuel gain ne serait que minime.
    Bref, je pense honnêtement que ce que tu cherches à faire n'est pas une bonne chose, sauf peut-être pour la culture générale.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    ce n'est pas surtout pour la performance, mais plutôt pour la propreté du code, j'ai finalement encapsulé preg_match dans une fonction qui supprime la chaine principale du tableau retourné.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 220
    Points : 167
    Points
    167
    Par défaut
    Citation Envoyé par s.n.a.f.u Voir le message
    Devil is in the details !
    c'est bien pour ça que je cherche à simplifier le code!

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par gael Voir le message
    c'est bien pour ça que je cherche à simplifier le code!
    Oui... mais non.
    Je maintiens que ta "simplification" n'en est une que pour toi.
    Ainsi un nouvel intervenant sur le code sera obligé de se rappeler que cette fonction encapsule le matching pour ne retourner que la chaîne voulue, tout ça pour s'économiser UNE ligne de code.

    Attention, je ne dis pas que ton but original n'était pas intéressant, et il aurait pu trouver une solution en perl par exemple. Mais en PHP, je ne vois pas plus simple que le classique enchainement preg_match => traitement du tableau résultant.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. SSII - une option pour les docteurs?
    Par Aligator dans le forum SSII
    Réponses: 9
    Dernier message: 17/04/2009, 17h46
  2. Réponses: 5
    Dernier message: 12/03/2008, 16h38
  3. une méthode pour ne pas utiliser onLoad
    Par Brag__ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 11h40
  4. [META] Une balise pour ne pas mettre la page dans le cache
    Par PierrotY dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 23/06/2006, 07h36
  5. Modifier une option pour la commande split
    Par vbcasimir dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 20/07/2005, 12h24

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