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

SQL Procédural MySQL Discussion :

[Regexp] Recherche dans un texte formaté html


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut [Regexp] Recherche dans un texte formaté html
    Salut

    J'ai une colonne qui contient du texte formaté en html, donc avec des balises <b>, <br>, etc...
    Et je voudrai pour rechercher un mot dans cette colonne, mais en évitant les noms de balise.

    Je voulais faire ca avec regexp avec dans l'idée de trouver tous les mots qui ne sont pas entre < et >

    En francais, ca donne :

    "Tous les mots correspondant
    qui ne sont pas précédés du caractère '<' sauf si le caractère '>' est présent entre '<' et le mot
    et
    qui ne sont pas suivis du caractère '>' sauf si le caractère '<' est présent entre '>' et le mot"

    Mais en code, j'y arrive pas.
    J'ai pas mal cherché sur le net et sur les forum, mais sans succes
    J'ai pas une très bonne maitrise des expressions regulieres.

    Peut etre aussi qu'il y a une autre méthode bcp plus simple pour arriver a mes fins.

    En tout cas, si quelcun peut m'aider, ca serai bien chouette

  2. #2
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Bonjour,

    Je ne connais de tuto sympa sur les expressions régulière, mais d'après mes connaissance en la matière, ce qui est décrit est faisable. Par contre, la où je douterais un peu plus, ce serait dans le cas où l'on a un '<' dans une chaine de caractère, ou du code javascript avec je ne sais quoi à l'intérieur.

    Si j'ai un peu plus de temps, je repasserais pour tenter une expression.
    Pensez au tag

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Non, y aurra aucun < ou > autre dans la chaine car ils sont remplacés par &gt; et &lt;.

    Ni de javascript non plus, il s'agit juste de texte mis en forme par des balises html (pour le gras, italique, souligné, la taille, couleur ...)

  4. #4
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    J'ai presque obtenu ce que je voulais :
    (C'est pas beau à voir, mais peut-être que c'est simplifiable et a priori, ca marche)

    Regexp '^([^<]*|.*>[^<]*)?Mot?([^>]*<.*|[^>]*)?$'

    Ca marche meme si le mot est inclu dans une balise pas fermée ce qui ne pose pas de problème a priori puisque aucun < ou > autre que ceux des balises n'est présent dans la chaine

    Par contre, ca trouve le mot meme si ce n'est qu'une partie d'un autre mot :
    Genre, TotoMonmot, et j'aimerai bien que ca ne renvoie que des vrais mots.

    J'attends vos suggestions !
    (Si quelcun se sent le courage)

  5. #5
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    en remplaçant les '?' par "[^a-zA-Z]" par exemple. Mais il faut aussi voir pour les mot composé...
    Pensez au tag

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    En fait, j'avais laissé un ? en trop dans ma réponse précédante.

    Sinon, je pense avoir trouvé la solution finalement :
    (Attention les yeux)

    Regexp '^(([^<]*|.*>[^<]*)[^[:alnum:]^<])?Toto([^[:alnum:]^>]([^>]*<.*|[^>]*))?$'

    Donc celle la trouve toute les lignes qui contiennent le mot Toto (sans tenir compte de la casse) en s'assurant que ce n'est pas une balise et que ce n'est pas une partie d'un autre mot.


    J'ai trouvé la réponse à ma propre question tout seul, mais je la poste quand même pour ceux que ca interesse

    Si quelcun trouve un bug dans mon expression, merci de me le faire savoir

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    J'ai enlevé le tag RESOLU parce que j'ai encore un problème, il trouve pas les mots si ils sont collés à une balise, et je comprend vraiment pas pourquoi.

    (En même temps, j'ai peu d'espoir, ce topic à pas rencontré un grand succés)

  8. #8
    Membre expérimenté
    Avatar de Adjanakis
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    739
    Détails du profil
    Informations personnelles :
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2004
    Messages : 739
    Points : 1 351
    Points
    1 351
    Par défaut
    Ce ne serait pas lié à ça ?

    Pensez au tag

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Je pense pas, c'est depuis que j'ai ajouté la partie pour ne pas prendre les morceaux de mots
    [^[:alnum:]^<]

    Si j'enlève ca, ben ca prnd les morceaux de mots, mais ca pose pas de problème quand les mots sont collés aux balises

  10. #10
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    En fait, c'était bien lié.
    Si le caractère le plus proche est < alors on peu avoir n'importe quel caractère derrière.
    Donc j'ai rajouté un OU pour gérer cette possibilité.

    J'ai pas vu de nouveaux problèmes depuis cette mise à jour, donc je pense que ca marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regexp '^(([^<]*|.*>[^<]*)[^[:alnum:]^<]|.*>)?Mot(<.*|[^[:alnum:]^>]([^>]*<.*|[^>]*))?$'

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

Discussions similaires

  1. recherche dans du texte html
    Par Sylvercis dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/03/2015, 11h44
  2. insérer un mot sans formatage dans un texte formaté
    Par happyculteur dans le forum VBScript
    Réponses: 2
    Dernier message: 19/11/2007, 17h22
  3. Réponses: 5
    Dernier message: 13/07/2007, 14h46
  4. Recherche dans champs texte SQL 2005
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/03/2007, 17h23
  5. [Debutant] TStrings et recherche dans le texte
    Par muquet dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2006, 16h02

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