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 :

regex et mots commençant ou finissant par une entité html [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut regex et mots commençant ou finissant par une entité html
    bonjour à tous,

    ma question de débutant :comment indiquer une limite de mot dans une regex, quand le mot commence ou fini par une entité décimale &.#...;

    (j'écris les entités citées ci-dessous avec un point entre & et #)

    Dans un script php, j'ai besoin de remplacer un mot dans un texte html issu d'une variable (il n'y a pas de base de données). Ce mot peut comporter des accents sous deux formes possibles en raison des différents éditeurs utilisés pour la rédaction du texte : exemple é et &.#233;

    Aucun soucis avec les caractères accentués (é)

    par contre, les entités de type &.#233; empêchent l'interpretation de la limite de mot lorsqu'ils sont placés au début ou à la fin du mot. Du coup, tout se passe comme si les \b de la regex n'étaient pas présents.

    si j'utilise un logiciel testeur de regex (exemple regex coach), je constate aussi le problème.

    Exemple, cas du mot commençant par un caractère accentué :
    dans le texte, je place : établi, rétabli, &.#233;tabli, r&.#233;tabli
    en testant la regex : \b(établi|&.#233;tabli)\b

    les caractères accentués "normaux" ne posent pas de problème : établi est trouvé, rétabli ne l'est pas.

    Mais &.#233;tabli n'est pas trouvé alors que r&.#233;tabli, oui, comme si il n'y avait pas de limite de mot \b.

    Même constat avec un caractère accentué à la fin : clé, clés et cl&.#233;, cl&.#233;s
    la regex : \b(clé|cl&.#233;)\b

    clé est trouvé et pas clés donc c'est parfait.
    Mais cl&.#233; n'est pas trouvé (il le devrait pourtant) et cl&.#233;s est trouvé montrant que la limite de mot avant ne fonctionne pas.

    Bien sûr, si je fais \bcl&.#233;\b, le problème est le même.

    ce que je cherche à faire n'est peut-être pas possible ?
    pourtant la solution preg_replace et regex fonctionne très bien pour trouver le mot et le remplacer en évitant qu'il fasse partie d'une url, de balises html ou d'un lien et ce, même s'il est accentué (enfin, j'ai dû placer en début descript ceci :setlocale(LC_CTYPE, 'fr_FR.ISO-8859-1'); ).

    Il y a tellement de docs sur le sujet que je suis sûrement passé à coté de l'explication et peut-être de la solution. Besoin d'un peu d'aide, donc ;o)

    merci,
    cordialement,
    Ludo ;)

  2. #2
    Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [résolu]
    et bien j'ai trouvé une astuce pour l'instant car il semble que le caractère & ne puisse être vu comme une limite de mot. J'ai donc remplacé les limites de mots "\b" encadrant le mot recherché dans la regex par :

    (?<=\W) et (?=[^A-Za-z0-9À-ÖØ-öø-ÿ_])

    A gauche : reconnait un mot qui suit l'opposé d'un caractère alphanumérique. (c'est curieux, mais ça marche)

    A droite : reconnait un mot qui n'est pas suivi des caractères listés.

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

Discussions similaires

  1. Appel d'une classe Java par une page HTML
    Par kqman dans le forum Général Java
    Réponses: 7
    Dernier message: 06/04/2011, 15h58
  2. regex pour supprimer une ligne commençant par une lettre
    Par stpaul04 dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 03/02/2011, 23h04
  3. Réponses: 2
    Dernier message: 14/09/2010, 11h27
  4. Réponses: 7
    Dernier message: 09/03/2009, 21h12
  5. Réponses: 2
    Dernier message: 07/08/2007, 13h01

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