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

PHP & Base de données Discussion :

Extraire du texte d'un array avec un preg_match


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut Extraire du texte d'un array avec un preg_match
    Bonjour à tous,
    Après de nombreuses semaines de tests et essais, je me résous à vous demander de l'aide (j'ai au préalable tester la recherche du forum, sans succès).

    Tout d'abord l'objet de mon programme php interfacé avec un bdd mysql :
    - sur notre forum, un petit outil permet aux utilisateurs de télécharger leurs photos dans les sujets de discussion, sans utiliser un hébergeur distant. chaque photo est téléchargée dans un répertoire Upload. Tout marche bien sauf qu'à la longue, le répertoire qui contient les images téléchargées contient plus de 3000 images "orphelines" CAD non utilisées sur le forum donc non enregistrées dans la bdd des sujets de conversation.

    - je développe donc un outil qui permet d'extraire de la BDD les publications qui contiennent des photos identifiables sous le format CPHxxxxxxx.extension (elles sont formatées ainsi après le téléchargement) dans le but des les comparer ensuite au répertoire UPLOAD et supprimer ensuite les orphelines. Mais je n'en suis pas encore là. Pour l'instant, l'extraction des textes qui contiennent des photos marche très bien, j'affiche mon array correctement, sauf qu'actuellement il affiche le texte complet d'une discussion. Je voudrais le "nettoyer" et extraire uniquement le texte qui contient CPHxxxxxxx.jpg en utilisant preg_match('/^CPH[0-9]+./i'. Mais là je bloque depuis des semaines, rien ne fonctionne.

    EXTRACTION ET TRI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $tablobdd  = mysql_query("SELECT post_text FROM `phpbb_posts` WHERE `post_text` LIKE '%CPH%'");
    mysql_close();
     
    while ($row = mysql_fetch_array($tablobdd, MYSQL_NUM)) {
    preg_match_all('/cph[0-9]+./i', $row[0] ,$matches);
    printf("%s <br><br>", $matches);
    }
    mysql_free_result($tablobdd);
    Mais que faire ensuite après la fonction (s'il en faut une) ? une boucle j'imagine qui pour chaque ligne de $tablobdd utilise la fonction triage pour n'afficher que la partie CPHxxxxxxxx ?
    Merci d'avance pour votre éclairage.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    regardez la documentation de la fonction, le texte que vous cherchez n'est pas dans le retour de la fonction :
    https://php.net/preg_match

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    En partant du principe qu'un post peut contenir plusieurs images, la fonction appropriée serait plutôt preg_match_all (là aussi consulter le manuel PHP pour voir comment elle marche).

    La pattern que tu utilises n'est pas bonne: /^cph[0-9]+./i.

    ^ est une ancre de début de chaîne: est-ce que tes images sont en début de chaîne?

    Pourquoi ta pattern se termine par un point? As-tu lu un tutoriel sur les regex?
    Pourquoi n'y a t-il pas l'extension jpg dans la pattern?

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 9
    Par défaut
    Citation Envoyé par mathieu Voir le message
    regardez la documentation de la fonction, le texte que vous cherchez n'est pas dans le retour de la fonction :
    https://php.net/preg_match
    Merci beaucoup à vous de vous pencher sur mon souci oui j'ai lu ce lien mais j'ai passé un temps fou pour trouver un masque qui fonctionne. Celui proposé fonctionnait mais avec un array vraiment basique type array("cph123245","j'ai une cph12","toto","cphxxxx.jpg");

    Citation Envoyé par CosmoKnacki Voir le message
    En partant du principe qu'un post peut contenir plusieurs images, la fonction appropriée serait plutôt preg_match_all (là aussi consulter le manuel PHP pour voir comment elle marche).

    La pattern que tu utilises n'est pas bonne: /^cph[0-9]+./i.

    ^ est une ancre de début de chaîne: est-ce que tes images sont en début de chaîne?

    Pourquoi ta pattern se termine par un point? As-tu lu un tutoriel sur les regex?
    Pourquoi n'y a t-il pas l'extension jpg dans la pattern?

    - ok j'ai supprimé l'ancre puisque effectivement les images ne sont pas en début de chaine
    - ok pour le preg_match_all puisque bien entendu il peut y avoir plusieurs photos dans un texte.
    - Je ne précise pas l'extension car il y en a 3 d'acceptées (jpg,jpeg et png). Donc ce qui m'intéresse c'est juste la racine pour la suite de mon test.

    J'ai corrigé le bout de code dans le 1er post sinon. Ca n'affiche à l'écran que des Array Avec le covid, on perd des neurones vous pensez ?

  5. #5
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 667
    Par défaut
    Citation Envoyé par gtclés Voir le message
    Ca n'affiche à l'écran que des Array Avec le covid, on perd des neurones vous pensez ?
    pour débuger et voir ce qu'il y a dans une variable, je vous conseille cette fonction qui affichera n'importe quelle variable composée d'objets, tableaux, code XML ou valeurs TRUE, FALSE ou NULL,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function aff($var) {
    	echo "<pre>";
    	echo htmlspecialchars(var_export($var, TRUE));
    	echo "</pre>";
    }

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Le point a une signification spécial, dans une pattern il représente n'importe quel caractère. Pour figurer un point dans une pattern (un vrai point), tu dois l'échapper avec un antislash.

    Le fait qu'il y ait trois extensions possible n'empêche pas de les décrire dans la pattern: (?:jpeg|jpg|png) (la barre est un OU logique et (?:...) est un groupe non-capturant).

Discussions similaires

  1. [XL-2010] Excel - Extraire le texte d'un SmartArt avec VBA
    Par maximelocatelli dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/05/2017, 08h38
  2. Extraire le texte d'un pdf avec PdfBox en C#
    Par nadabb dans le forum C#
    Réponses: 10
    Dernier message: 28/05/2009, 21h00
  3. Extraire du texte d'un PDF avec layout.
    Par zedtux dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/04/2008, 15h37
  4. [DOM] Extraire le texte avec DOM
    Par soumou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/11/2006, 00h21
  5. [COM] Extraire le texte d'un fichier "word" (.doc) avec
    Par ptikiwi dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/06/2006, 17h06

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