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 :

preg_split et caractères cyrilliques [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut preg_split et caractères cyrilliques
    Bonjour.

    J'utilise la fonction suivante :

    $keywords = preg_split("/[\n\r\t,;]+/", $le_texte, -1, PREG_SPLIT_NO_EMPTY);
    Pour éclater une zone texte en morceaux, si tabulation, retour chariot, virgule, point virgule, point.

    Tout marche très bien, sauf si dans le texte, il y a un mot en cyrillique.
    Et là, chaque lettre du mot cyrillique est "éclatée" séparément comme si c'était un mot ou une phrase balisée par un des caractères séparateurs.

    Je ne sais pas comment résoudre mon problème.

    Merci.

  2. #2
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut


    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $keywords = preg_split("/[\s,;]+/", $le_texte, -1, PREG_SPLIT_NO_EMPTY);
    \s inclut " ", \r, \t, \n et \f.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Pigoulou Voir le message
    $keywords = preg_split("/[\n\r\t,;]+/", $le_texte, -1, PREG_SPLIT_NO_EMPTY);
    Tout marche très bien, sauf si dans le texte, il y a un mot en cyrillique.
    Et là, chaque lettre du mot cyrillique est "éclatée" séparément comme si c'était un mot ou une phrase balisée par un des caractères séparateurs.
    Si ce sont des entité HTML, alors le point-virgule de ces entités seront éclatés. est l'entité HTML de Б.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par Tisha Carpenter Voir le message
    Si ce sont des entité HTML, alors le point-virgule de ces entités seront éclatés.
    Bien vu, le problème vient bien de là.
    Quelle parade adopter?
    (sachant que je n'ai pas forcement que du cyrillique dans ces données, ca peut être du mélange de toutes langues dans le texte à éclater).
    Un moyen de faire détecter et correctement à preg_split les mots composés d'entités html (ne prendre en compte que les '," séparateurs non liés à une entité html)?

    Merci (les expressions régulières me sont assez étrangères...)

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Le pattern suivant doit détecter les points virgule qui ne sont pas des entités html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/(?<!&#\d{2-4});/';
    Cependant, j'ai un môme sur les genoux, donc pas le temps de tester et je te laisse le soin d'intégrer ceci dans ton expression
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    /\b[\s,;]\b+/ ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    Concernant la proposition de jml94, elle traite bien les caracteres cyrilliques, mais les mots cyrilliques (qui apparraissaient sous forme de caracteres eclatés), n'apparaissent plus du tout dans la liste de mes résultats (alors qu'ils devraient apparaitrent en cyrillique sous forme de mots entiers, et non caracteres eclatés).

    C'est peut etre (voir sans doute) moi qui ait mal intégré sa solution dans mon pattern existant :

    preg_split("/[\n\r\t,(?<!&#\d{2-4});]+/", $le_texte, -1, PREG_SPLIT_NO_EMPTY);

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Pourrais-tu fournir une chaîne de test afin que je puisse affiner ?
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    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
    <?php
                  $le_texte="un, casse tete; ces - expressions. régulières; тро  . merci pour votre aide";
     
    			  $keywords = preg_split("/[\n\r\t,(?<!&#\d{2-4});]+/", $le_texte, -1, PREG_SPLIT_NO_EMPTY);
     
    			  $i=0;
    	          while ($i<count($keywords))
    	          {
     
    			        echo $keywords[$i]."<br>";
    					$i++;
     
    			  }
     
    ?>

    NB: il manque aussi le "." comme séparateur dans le pattern qui détermine les caracteres séparateurs.

  11. #11
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'ai ça qui semble retourner ce qu'il faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $le_texte="un, casse tete; ces - expressions. régulières; тро  . merci pour votre aide";
    $keywords = preg_split('/(?<!&#\d{4});|[\n\r\t,.]/', $le_texte, -1, PREG_SPLIT_NO_EMPTY);
    foreach($keywords as $elem)
    	print trim($elem) . "<br/>\n";
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 89
    Points : 67
    Points
    67
    Par défaut
    bravo ca marche.

    J'ai aussi noté le "foreach... as" à la place de mon 'while' et variable incrementée...

    merci beaucoup

    meme si je suis un peu frustré car je n'ai pas compris la syntaxe, mais ca viendra, il faut que je m'initie progressivement sur les expressions régulieres

    encore merci

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

Discussions similaires

  1. [SQL] Combinaison caractère cyrilliques et caractères "normaux"
    Par Istrella dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/09/2008, 14h31
  2. E-mail en caractères cyrillique illisible
    Par oxmoun dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2007, 17h18
  3. [VBA]: Caractère Cyrillique et Recordset
    Par ADONET dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2007, 10h37
  4. [VB6]Caractères cyrilliques
    Par Redbat dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/05/2006, 19h11
  5. [XSL] Transformation xsl et jeu de caractères cyrillique
    Par Maximil ian dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/09/2005, 11h41

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