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 accents en debut de chaine


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Points : 14
    Points
    14
    Par défaut Regex et accents en debut de chaine
    Bonjour a tous,

    je me retrouve face à un problème qui me triture la tête avec les regex et les accents en début de chaine depuis quelques jours déjà

    je m'explique

    exemple 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $texte = "un exemple avec le mot : décrire";
    $patterns[] = "#\bdécrire\b#i";
    $replaces[] = "parler";
     
    $new_texte = preg_replace($patterns, $replaces, $texte, 1);
     
    echo $new_texte;
    Dans ce cas la mot "décrire" est bien remplacé par "parler" et le nouveau texte sera alors :
    un exemple avec le mot : parler

    exemple 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    $texte = "un exemple avec le mot : écrire";
    $patterns[] = "#\bécrire\b#i";
    $replaces[] = "parler";
     
    $new_texte = preg_replace($patterns, $replaces, $texte, 1);
     
    echo $new_texte;
    Ici le mot "écrire" n'est pas modifié et la phrase est donc :
    un exemple avec le mot : écrire



    Pour en conclure, la fonction ne change pas les mots avec un accent en début et en fin de chaîne, mais au milieu ça passe J'ai essayé pas mal de technique comme le /p{L}, ainsi que diverses solutions sans trouver malheureusement

    Si qqun a des pistes... parce que la je suis perdu

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Et si tu transformes les caractères accentués en code ASCII avant de faire ton remplacement ?

  3. #3
    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 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est normal, la classe \b correspond à une limite de mot, or les caractères constituant un mot ne comprennent pas les caractères accentués donc ton motif n'est pas le bon.
    Essaye peut-être avec \s (tout caractère d'espacement) éventuellement couplé avec certains caractères spécifiques comme le trait d'union, l'apostrophe, etc.
    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

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 6
    Points : 14
    Points
    14
    Par défaut
    Merci pour les reponses rapides

    Je viens d’approfondir un peu les recherches dans le code et apparemment, le pb viendrait plutôt de la fonction preg_match_all()

    Je m'en sers pour trouver un mot ou expression ( listé dans une bdd) dans un texte, et la remplacer par un synonyme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $exp = "écrire";
    $texte = "du texte avec le mot écrire";
     
    $reg = preg_match_all("#\b" . $exp . "\b#i", $texte, $result);
     if (!empty($result[0][0])) {
     
    // traitement et remplacement
     
    }
    je viens en effet de m'apercevoir que le preg_match_all ne trouvais même pas le mot "écrire" dans le texte, alors qu'il trouve "débattre" => 2 mots avec accents, 1/2 est remplacé!

    par contre dans ce cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    $exp = "écrire";
     
    //ici avec "décrire"
    $texte = "du texte avec le mot décrire";
     
    $reg = preg_match_all("#\b" . $exp . "\b#i", $texte, $result);
     if (!empty($result[0][0])) {
     
    // traitement et remplacement
     
    }
    le mot "écrire" est bien trouvé, mais a l'interieur du mot "décrire"

    imaginons que le synnonyme du mot "écrire" sera "composer" et bien le $texte me renvoi ca : du texte avec le mot dcomposer

    Je suis vraiment débutant avec les regex, alors je dois mal faire qque part

Discussions similaires

  1. Enlever des caracteres en debut de chaine
    Par Mathieu.Nanoux dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/07/2007, 11h14
  2. [Regex]Recherche de mots dans une chaîne
    Par lionel69 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 17/11/2005, 18h20
  3. [debutant] [XML] chaine de connection base de donnee
    Par clairenes dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 28/07/2005, 18h53
  4. [Debutant(e)]Chaines de caractères
    Par moimoi_1 dans le forum Langage
    Réponses: 5
    Dernier message: 21/07/2005, 14h47
  5. [debutant]transform chaine en entier
    Par loutente dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/03/2005, 10h53

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