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 :

transformer plusieurs parties (définies pas un masque) d'une même chaîne de caractère en liens : preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut transformer plusieurs parties (définies pas un masque) d'une même chaîne de caractère en liens : preg_replace
    Bonjour à tous,

    concrètement j'ai une liste de publications au format HTML. Dans cette liste il y a des DOI affichés comme dans ce modèle:

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <li>Auteur 1, Auteur 2, Auteur 3. <strong>Année</strong>. 
    Titre de l article. Journal. Volume. PageDébut-pageFin. DOI : 10.1016/journal.année.autresInformations
    </li>

    Un masque possible de DOI est celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $regDoi = '#^10.\d{4,9}/[-._;()/:A-Z0-9]+$#i';
    J'aimerais pouvoir transformer les doi en liens à peu près comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $texte = "<li>Auteur 1, Auteur 2, Auteur 3. <strong>Année</strong>. 
    Titre de l'article. Journal. Volume. PageDébut-pageFin. DOI : 10.1016/journal.année.autresInformations
    </li>"
     
    $publis_liens =preg_replace($regDoi, '<a href="https://doi.org/$0/">$0</a>', $texte);
     
    echo $publis_liens;
    Mais ça ne fonctionne pas.
    Conscient de ne pas bien maîtriser la mécanique des regex et des fonctions associées, j'ai parcouru les tutoriels à ce sujet mais sans trouver de solution à mon problème.

    D'ailleurs je ne comprends pas non plus pourquoi ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $texte='blabla 0456231245 blabla';
    $regNum='#^0[1-68][0-9]{8}$#';
     
    if(preg_match($reg4, $texte))
        {
            echo "Oui ";
     
        }
        else
        {
            echo "Non";
    	}
    Me renvoie "non"" alors que si j'enlève les "blabla" "ou les ""blabla" plus les espaces il me renvoie "oui".
    Est-ce qu'il y a un problème avec les espaces ?

    Est-ce que, en gros, il faut que je stocke chaque chaîne de caractère séparée par un espace dans un tableau, que je parcours ce tableau, remplace les occurrences correspondant à mon masque et qu'une fois fini je réaffiche chaque entrée du tableau pour retrouver ma liste de publis modifiées et contenant donc maintenant les liens ?

    Merci d'avance pour votre aide,

    David

  2. #2
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Bonjour, je ne connais pas assez les remplacements avec expression régulière pour vous aider sur votre problème principal.

    Mais concernant votre seconde question, dans $regNum='#^0[1-68][0-9]{8}$#';, la partie ^0 précise que la chaîne doit commencer par un un 0 et la partie [0-9]{8}$ précise que la chaîne doit terminer par 8 chiffres. Donc avec "blabla", la chaîne ne correspond pas au masque...
    Enlevez les ^ et $ si vous ne voulez pas faire une recherche du début à la fin de la chaîne.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Merci Trehinos.
    J'avais compris que ^ et $ signifiait début et fin, mais je pensais que c'était le début et la fin du masque, et non le début et la fin de la chaîne à analyser.
    Evidemment ça change toute l'interprétation.
    Sans votre réponse j'aurais mis du temps à comprendre cette erreur.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Dommage que je ne puisse pas vous mettre plusieurs pouces verts parce que votre remarque vient de solutionner en 1 min un problème que je pensais bien plus ardu à résoudre et sur lequel je me prenais la tête depuis des heures.
    J'ai maintenant tous les liens qui s'affichent sur ma page sans devoir à chaque fois récrire les balises <a> pour chaque DOi grâce à ces 3 petites lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $regDoi = '#10.\d{4,9}/[-._;()/:A-Z0-9]+#i';
    $publis_liens =preg_replace($regDoi, '<a href="https://doi.org/$0">$0</a>', $publis);
    echo $publis_liens;
    avec $publis contenant une liste de publications en html
    Ca va me faire gagner un temps fou pour la mise à jour du site du labo.

    Mille mercis Trehinos et bonne continuation à vous,

    David

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2010, 17h10
  2. Réponses: 2
    Dernier message: 21/09/2009, 15h20
  3. Réponses: 9
    Dernier message: 03/06/2009, 17h05
  4. Transformer une chaîne de caractères en lien hypertexte
    Par laurentdepibrac dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/05/2008, 11h35
  5. Réponses: 3
    Dernier message: 16/10/2003, 11h22

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