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 :

trouver des mots dans un texte sans prendre en compte le balisage BBCODE


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut trouver des mots dans un texte sans prendre en compte le balisage BBCODE
    Bonjour,

    J'ai un moteur de recherche qui "pioche" dans une table qui contient du BBCODE.

    Je souhaiterai que le ou les mots recherchés n'appartiennent pas à des balises.

    Exemples :
    Prenons cette chaine --> [a href="../amerindiens/autres/black_hills.php" target="_blank"]amerindiens[/a]
    Prenons ce mots à rechercher --> amerindiens

    Dans cette exemple, le mot va être trouvé deux fois, or, je souhaiterai qu'il ne soit trouvé qu'une fois. Sans prendre en compte le ce qui entre [].

    Est ce un regex dans ma requete SQL ?

    Je ne suis pas sur d'avoir été très clair Merci d'avance ...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Oui c'est un regex mais pas le plus simple il faut que tu répertories toutes les balises et que tu fasses toutes les combinaisons possible après c'est un select info Regex tonExpression

    <a><a>Amerindien</a></a> c'est une combinaison possible.

    La plupart des balises, de mémoire de php, c'est des > donc je te propose : ".*>info.* | .*]info.*"

    on prend 0 ou plusieurs caractère inconnue suivie d'un > avec ton info et n'importe après ou 0 ou plusieurs caractère inconnue suivie d'un ] avec ton info et n'importe après

    c'est simple mais avec une recherche sur amerindiens il cherchera tes lignes de ta table ou il y a :
    exemple 1 ....................................]amerindiens..............
    exemple 2 ]amerindiens
    exemple 3 [....]amerindiens[......

    après il faut pousser un peu l'expression pour l'optimiser .
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Merci XxArchangexX pour ton aide.

    <a><a>Amerindien</a></a> c'est une combinaison possible.
    Non, ce n'est pas possible ....
    Premièrement parce que cela ne correspond à rien et deuxièmement, parceque dans ma table, je n'ai que des balises BBCODE. C'est à dire ouverture et fermeture de crochets : [ ou /]

    Le regex que tu m'as indiqué ne donne pas le résultat escompté.

    Voici ou j'en suis :
    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
    27
     
    <?php
    // Source : http://www.expreg.com/lire-Chaines-source
    function cherche_mot_sans_bbcode($chaine,$mot_a_trouver) {
     
        $tab = preg_split('`(\[\w+.*?\])`',$chaine,-1,PREG_SPLIT_DELIM_CAPTURE);
     
        foreach($tab as $key=>$val){
     
            if(preg_match('`^\[\w+`',$val)){
                $tab[$key] = $val;
            }
     
            else {
                 $tab[$key]=preg_replace('`\b'.$mot_a_trouver.'\b`i','<span  style="background-color:#ffcc00">$0</span>',$val);
                $count_nombre_de_mot_a_trouver = 
            }
     
        }
     
        return implode($tab);
     
    }
     
    $chaine = 'Prenons cette chaine --> Les amerindiens : [a  href="../amerindiens/autres/black_hills.php"  target="_blank"]amerindiens[/a][br]Prenons ce mots à rechercher -->  amerindiens[br]Un exemple, en image [img src="amerindiens.gif"  alt="amerindiens" /].[br]Les amérindiens (avec un accent), un amerindien  (au singulier), Les amerindiens (pluriel)';
    echo cherche_mot_sans_bbcode($chaine,'amerindiens');
    ?>
    Ce code fonctionne parfaitement. Merci à http://www.expreg.com/lire-Chaines-source

    Me reste plus qu'a gérer ça avec ma requête SQL. Si quelqu'un a une idée, je suis preneur ...
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Salut

    J'ai une petite idée : On peut faire la rechercher d'un mot dans un texte sans bbcode.


    Par exemple, on enregistre le message avec bbcode(pour l'affichage) et sans bbcode (pour la recherche) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $message = "[body]
    	[quote="Guest"]coucou[/h1] c'est moi[virgule]
    	l'[a href="../amerindiens/autres/black_hills.php" target="_blank"]amerindiens[/a]
    [/body]";
    $text = strip_tags(str_replace(array('[',']'), array('<','>'), $message));// on supprime les balises BBCode
    mysql_query('INSERT INTO MESSAGES VALUES(text, bbcode) VALUE("'.addcslashes($text, '"').'", "'.addcslashes($message, '"').'")');

    Puis , on fait une recherche sur le text.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $text = 'amerindien';
    $rst = mysql_query('SELECT * FROM MESSAGES WHERE text LIKE "%'.$text.'%"');
    echo mysql_num_row($rst);// output 1

    Cdt,

  5. #5
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    C'est une solution qui me parait "lourde" (2 tables)...
    Mais, ça à le mérite d'être une solution qui marchera !

    Merci shurik'n pour ta suggestion ....

    Je réfléchis et suis toujours preneur d'une idée ...

    PS Ton code ne fonctionne pas shurik'n
    Écoute, sinon ta langue te perdra (proverbe Navajo)

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/05/2014, 13h12
  2. [RegEx] recuperer des mots dans un texte qui est un code php
    Par hendrix67 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2010, 16h11
  3. [RegEx] Surligner des mots dans un texte
    Par tomaprice dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2009, 13h28
  4. Recherche des mots dans un texte
    Par psyrio dans le forum Langage
    Réponses: 1
    Dernier message: 27/02/2009, 12h15
  5. [COM] Trouver des mots dans des PDF et autres documents ?
    Par zyongh dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/11/2006, 14h23

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