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 :

Frontière de mot avec caractère accentué [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut Frontière de mot avec caractère accentué
    Bonjour,

    Le pattern suivant :
    repère uniquement (c'est l'effet escompté) le a dans la phrase suivante :
    -> Il a un grand appétit.

    Mais si j'utilise ce pattern :
    la regex ne trouve aucune occurrence dans la phrase suivante :
    -> Il va à la piscine

    La frontière de mot \b ne semble donc pas fonctionner si le mot à rechercher (ici à ) commence (ou finit) par un caractère accentué...
    Existe-t-il un moyen de contourner cette limitation ? Merci.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    La notion de mot dans une expression régulière est une succession de caractères correspondant à la classe \w. Il est donc normal que les caractères accentués ne soient pas pris en compte.
    Dans ton cas, l'utilisation des limites de mots n'est donc pas adaptée.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    En effet, \b est la limite entre un caractère appartenant à \w et un caractère n'y appartenant pas (ou une des limites de la chaîne).

    Par défault \w est un raccourci pour [a-zA-Z0-9_] (soit les chiffres et les lettres ASCII et l'underscore), donc les caractères accentués n'en font pas partie. Cela dit, il est possible d'étendre le contenu de \w à l'ensemble des chiffres et des lettres unicode en utilisant le modificateur u. Par voie de conséquence le sens par défaut de \b s'en trouve également modifié.

    Donc /\bà\b/u fonctionnera très bien.

    NB: le modificateur u fait en réalité deux choses. Il étend à l'unicode les raccourcis de classes de caractères (\d, \w, \s ...), mais aussi il impose au moteur de regex de traiter la chaîne source comme de l'UTF8. Il est d'ailleurs possible de se passer de u et de spécifier explicitement ces deux actions en écrivant: /(*UCP)(*UTF8)\bà\b/, la directive (*UCP) étendant les classes de caractères, et (*UTF8) imposant une lecture en UTF8. Ces directives doivent être placées au début de la pattern (dans n'importe quel ordre).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    Merci CosmoKnacki, ta réponse convient parfaitement à ma problématique.

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

Discussions similaires

  1. [MySQL] user avec caractère accentué
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/01/2012, 19h40
  2. enregistrer un .TXT avec caractère accentué
    Par Mic92 dans le forum Général Python
    Réponses: 1
    Dernier message: 02/09/2010, 18h42
  3. Probleme de carré avec caractère accentué
    Par kaygee dans le forum ASP
    Réponses: 3
    Dernier message: 16/10/2008, 15h51
  4. Réponses: 5
    Dernier message: 19/09/2007, 14h47
  5. [JEditorPane] Problème avec caractère accentué
    Par scifire dans le forum Composants
    Réponses: 6
    Dernier message: 14/09/2005, 14h58

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