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 :

extraction chaine caractere


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut extraction chaine caractere
    Bonjour,

    Voici mon texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
    Je cherche a extraire la partie http://www.image1.jpg

    J'ai utilisé l'expression reguliere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#"http:.*\"#',$texte,$res);

    mais le résultat de $res[0] me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"'

    Savez-vous comment extraire seulement :

    http://www.image1.jpg


    Merci bcp

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    juste :
    le . prend tout jusqu'à la derniere occurence il faut le mettre en mode lazy pour s'arrêter à la première, le mode lazy c'est avec l'option "?" .*?

  3. #3
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    juste :
    le . prend tout jusqu'à la derniere occurence il faut le mettre en mode lazy pour s'arrêter à la première, le mode lazy c'est avec l'option "?" .*?

    Si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#http://\s+#',$texte,$res);
    Cela me retourne un tableau vide:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <pre>Array
    (
    )
    </pre>

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Points : 140
    Points
    140
    Par défaut
    essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	$texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
    	$pattern = '#(http:\/\/)+(.*?)\\\"#';
    	$replacement = " $1";
    	preg_match($pattern, $texte, $res);
    	echo($res[1].$res[2]);
    ?>

  5. #5
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par nault Voir le message
    essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	$texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
    	$pattern = '#(http:\/\/)+(.*?)\\\"#';
    	$replacement = " $1";
    	preg_match($pattern, $texte, $res);
    	echo($res[1].$res[2]);
    ?>
    Merci à tous pour votre aide

    J'essaye d'utilise ta méthode pour extraire des images, mais je n'arrive pas à les isoler


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $texte = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
    $pattern = '#(<img.*(http:\/\/)+(.*?)(\\\")+(.*))#';
    $replacement = " $1";
    preg_match($pattern, $texte, $res);
    echo "<pre>";
    print_r($res);
    echo "</pre>"

    Résultat :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <pre>Array
    (
        [0] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >
        [1] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >
        [2] => http://
        [3] => <a href="http://www.image3.jpg" target="_blank">www.image3.jpg</a>
        [4] => \"
        [5] =>  >
    )
    </pre>

    Mon but étant d'avoir pour chaque image a décomposition suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <pre>Array
    (
        [0] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">
        [1] => http://
        [2] => <a href="http://www.image3.jpg" target="_blank">www.image3.jpg</a>
    )
    En fait le but sera de tester l'image en fonction de sa largeur, et si il me convient pas je supprime le bloc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">

    Comment faire pour isoler chaque balise img ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    comme ca avec un preg_match_all sinon t'aura que la première occurrence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $str = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
    preg_match_all('/(?<=\x22)http\x3A\x2F{2}.*?(?=\x5C?\x22)/', $str, $matches);
    print_r($matches);
    /*
    Array
    (
        [0] => Array
            (
                [0] => http://www.image1.jpg
                [1] => http://www.image2.jpg
                [2] => http://www.image3.jpg
            )
     
    )
    */
    ou comme ça : #(?<=")http://.*?(?=\\\?")#, si l'ASCII ca te perturbe, mais c'est plus simple de mettre le code ASCII que d'échapper un caractère, surtout en PCRE où beaucoup sont réservés (en plus des délimiteurs, et des quotes PHP)

  7. #7
    Membre actif
    Inscrit en
    Septembre 2004
    Messages
    450
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 450
    Points : 267
    Points
    267
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    comme ca avec un preg_match_all sinon t'aura que la première occurrence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $str = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
    preg_match_all('/(?<=\x22)http\x3A\x2F{2}.*?(?=\x5C?\x22)/', $str, $matches);
    print_r($matches);
    /*
    Array
    (
        [0] => Array
            (
                [0] => http://www.image1.jpg
                [1] => http://www.image2.jpg
                [2] => http://www.image3.jpg
            )
     
    )
    */
    ou comme ça : #(?<=")http://.*?(?=\\\?")#, si l'ASCII ca te perturbe, mais c'est plus simple de mettre le code ASCII que d'échapper un caractère, surtout en PCRE où beaucoup sont réservés (en plus des délimiteurs, et des quotes PHP)

    C'est exactement ce que je cherche à extraire.

    Comment je faut aussi pour récupérer chaque balise img complète :

    <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">
    <img src=\"http://www.image2.jpg\" width=\"128\">
    <img src=\"http://www.image3.jpg\" >

    En fait ce que je cherche a faire c récuperer toutes les balises html img
    En extraire les images afin de déterminer leur taille
    Si la taille des images sont supérieur à une largeur donnée, je n'affiche pas ou supprimes la balise img concernée

    Si vous connaissez un bon ptit bouquin sur les expressions reguliere en php je suis preneur !!!

    Merci encore

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

Discussions similaires

  1. extraction chaine caractere
    Par omelhor dans le forum Linux
    Réponses: 9
    Dernier message: 20/07/2010, 11h55
  2. [RegEx] extraction chaine caractere
    Par omelhor dans le forum Langage
    Réponses: 4
    Dernier message: 18/09/2009, 13h35
  3. extraction nombre from chaine caractere
    Par Matmal11 dans le forum Modules
    Réponses: 4
    Dernier message: 22/01/2007, 13h59
  4. [RegEx] Extraction chaine de caractere
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 17/03/2006, 16h05
  5. [String] Extraction chaine de caractères
    Par beZor dans le forum Langage
    Réponses: 9
    Dernier message: 27/02/2006, 14h46

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