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 :

Les regex avec des mots composés


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Halex78
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 75
    Par défaut Les regex avec des mots composés
    Bonsoir, j'ai un problème concernant les regex avec php :
    j'ai une table "glossaire" contenant des mots avec des définitions : un champs "mot" et un champs "definition".

    j'utilise str_ireplace pour remplacer les mots d'un texte qui sont présents dans cette table par des liens ouvrant une popup dans laquelle apparait la définition du terme.
    Seulement dans ma table (mysql), il y a des termes qui diffèrent dans ce genre :
    "Naskyrie" et "Zones de Naskyrie"... Evidemment ca le fait pour de nombreux mots et ca ne se limite souvent pas qu'à deux exemples comme ceux ci (parfois une dizaine...

    Je ne suis pas très à l'aise avec les regex, mais je n'hésite pas non plus à faire des recherches seulement là, je ne sais vraiment pas comment procéder...

    Donc voilà, merci de bien vouloir m'éclairer sur ce sujet.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    J'étais en train de t'écrire le code, mais j'ai été un peu présomptueux... je n'ai pas assez de temps à te consacrer. Par contre, j'ai beaucoup appris sur les expressions régulières avec cette doc, où tu devrais trouver ton bonheur.

    En fait, c'était [ftp://ftp-developpez.com/cyberzoide/java/regex.pdf], mais ancienne version. La nouvelle semble plus complète. (ben non, c'est pour Java celle-ci!)

    ben c'était pas celle-là non plus, c'était bien le premier lien que je connaissait, mais une ancienne version.

  3. #3
    Membre confirmé Avatar de Halex78
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 75
    Par défaut
    Bonsoir, merci pour la réponse et ces liens pour la doc (j'ai été sur expreg.com), mon problème est surtout que je ne vois pas quelle logique adopter.
    Tu n'as pas codé car tu as dit que tu n'as pas le temps, cela veut dire que tu vais une idée de comment t'y prendre... Si c'est le cas, peux tu me dire comment ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 85
    Par défaut
    Si tu insiste, j'ai ce bout de code, mais il marche pas et je pense pas t'orienter sur la bonne voix. Surtout que tu devais déjà avoir quelque chose du même genre...
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $aGlossaire = array(array('mot'=>'Jeannot', 'definition'=>'le pote'),
      array('mot'=>'Jeannot Lapin', 'definition'=>'le lapin'));
    $strLigne = 'Ben Jeannot est mon pote et Jeannot Lapin est celui de ma fille';
    $aTrouv = array();
     
    arsort($aGlossaire);
    foreach ($aGlossaire as $key => $aDefMot) {
      if (stripos($strLigne, $aDefMot['mot']) !== FALSE) {
        $bBreak = FALSE;
        foreach ($aTrouve as $val) {
          if (stripos($val, $aDefMot['mot']) !== FALSE) {
            $bBreak = TRUE;
            break;
          }
        }
        if ($bBreak) break;
        $aTrouve[] = $aDefMot['mot'];
        $strLigne = preg_replace(
    '/'.$aDefMot['mot'].'/',
    '<a style="color:#F00;" title="'.$aDefMot['definition'].'">'.$aDefMot['mot'].'</a>',
    $strLigne);
      }
    }
     
    echo '<br />strLigne = '.$strLigne;
    Il faudrait peut-être dans un premier temps rajouter un id aux balises a traitée: <a id="idTraite" ...>...</a>. Ensuite, il faudrait de ne pas traiter la chaîne d'un seul coup, mais, dans les cas particulier qui nous intéresse, d'extraire les chaînes entre les idTraite et de les traiter l'une après l'autre.



    Oui, ça complique bien les choses... mais pour l'instant, je ne vois pas d'autre solutions... mais c'est un joli exercice. Bonne chance à toi!

  5. #5
    Membre confirmé Avatar de Halex78
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 75
    Par défaut
    Bonsoir, je viens de regarder ta méthode... Ben j'avais pas fait comme ca (j'y ai réfléchi trois ou quatre jours jusqu'à aujourd'hui où je viens de voir le post).
    J'ai en fait remplacé TOUTES les entrées du glossaire par des mots sans espaces
    Jeannot lapin => Jeannotlapin, et je recherche ensuite les mots avec des espaces aux extrémités ce qui fait que jeannot ne peut être trouvé dans jeannotlapin, et je remplace ainsi ces mots par des liens avec les mots normaux (avec espaces)
    Voilà ca fonctionne à peu de choses près (je veux un truc qui interdise la présence de lettre autour de ce mot: ca marche pour le caractère qui vient juste après le mot mais pas le caractère qui vient juste avant : aurais tu une idée ?)

Discussions similaires

  1. [Regex] Difficulté avec des mots accentués
    Par p1xl_01 dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2011, 16h51
  2. REGEX - Repérer des mots avec des lettres accentuées
    Par rambc dans le forum Général Python
    Réponses: 2
    Dernier message: 16/07/2011, 15h33
  3. Réponses: 18
    Dernier message: 28/08/2006, 23h07
  4. [VBA-A]Amusons nous un peu avec des mots.
    Par Miss Ti dans le forum Access
    Réponses: 6
    Dernier message: 24/07/2006, 21h13
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

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