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 :

pattern mot composé de voyelles et consonnes en alternance [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 11
    Points : 11
    Points
    11
    Par défaut pattern mot composé de voyelles et consonnes en alternance
    je cherche un pattern pour récupérer des mots qui ne sont fait que d'une succession de 1 consonne et de 1 voyelle. Donc qui retourne
    patatine , papa, papi, tata, patate mais pas chat, pétaudière pantoufle gagne.

    merci à mon futur sauveur, dieu lui rendra au centuple.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    un regex qui fasse ça !!!
    purée, si ça existe, je vais apprendre un truc.
    Au fait la première lettre est aléatoire ou c'est toujours une consonne ?
    La source est une liste de mots ou un texte ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    ben j'ai commencé par un truc tout simple comme ça ([^aeiouy]{1}[aeiouy]{1}) mais je rencontre 2 problèmes que mes limitations en regex me donnent. Comment lui dire que l'on veut uniquement ce pattern une ou plusieurs fois et que l'on ne veut que ça.
    pour le début pour l'instant c'est pas très grave si déjà on retourne des mots comme patate papa. Eva, même si elle fut la première femme, attendra un peu.

    la source https://www.dcode.fr/recherche-mot-regexp

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(([^aeiouy][aeiouy])+[^aeiouy]?|([aeiouy][^aeiouy])+[aeiouy]?)$/i
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(([^aeiouyàâäéèêëîïôöùûüÿ][aeiouyàâäéèêëîïôöùûüÿ])+[^aeiouyàâäéèêëîïôöùûüÿ]?|([aeiouyàâäéèêëîïôöùûüÿ][^aeiouyàâäéèêëîïôöùûüÿ])+[aeiouyàâäéèêëîïôöùûüÿ]?)$/i
    Mais un spécialiste devrait faire mieux.

  5. #5
    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
    Il y a deux manières de faire:
    1. soit on décrit la chaîne de bout en bout (la technique montrée par jreaux)
    2. soit on interdit 2 consonnes ou 2 voyelles consécutives.


    Pour une liste de mots sans accents (comme sur le site):
    1. ^(?:[aeiouy](?:[^aeiouy][aeiouy])*[^aeiouy]?|[^aeiouy](?:[aeiouy][^aeiouy])*[aeiouy]?)$ (Un peu plus longue que celle de jreaux mais le principe est le même. Permet d'avoir les mots d'une seule lettre.)
    2. ^(?!.*[aeiouy]{2})(?!.*[^aeiouy]{2}) (On utilise deux tests avant négatifs, negative lookaheads, ancrés au début de la chaîne)


    NB: on peut aussi faire une sorte de mix des deux en décrivant toute la chaîne de bout en bout mais en interdisant la succession des voyelles ou consonnes: ^(?:([aeiouy])(?!(?1))|([^aeiouy])(?!(?2)))+$ (On utilise des groupes de capture puis des références vers ces groupes dans des tests avant négatifs. En bon français: soit une voyelle non suivie d'une consonne, soit une consonne non suivie d'une voyelle, répète le tout.)
    C'est plus court que la méthode 1, mais pas forcément plus efficace.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2018
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Merci la bonne solution pour moi c'est la première que tu donnes car soit le mot correspond en un seul bloque soit il n'est pas matcher. C'est parfait . Dieux te le rendra au centuple.
    je vais décortiquer le truc pour comprendre pourquoi je n'ai pas trouver tout seul comme un grand.

    Citation Envoyé par CosmoKnacki Voir le message
    Il y a deux manières de faire:
    1. soit on décrit la chaîne de bout en bout (la technique montrée par jreaux)
    2. soit on interdit 2 consonnes ou 2 voyelles consécutives.


    Pour une liste de mots sans accents (comme sur le site):
    1. ^(?:[aeiouy](?:[^aeiouy][aeiouy])*[^aeiouy]?|[^aeiouy](?:[aeiouy][^aeiouy])*[aeiouy]?)$ (Un peu plus longue que celle de jreaux mais le principe est le même. Permet d'avoir les mots d'une seule lettre.)
    2. ^(?!.*[aeiouy]{2})(?!.*[^aeiouy]{2}) (On utilise deux tests avant négatifs, negative lookaheads, ancrés au début de la chaîne)


  7. #7
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je profite de la présence de la saucisse cosmique et du dalmatien sur ce fil pour leur poser une question récurrente chez moi, et qui a tout à voir avec ce fil.
    Sur une problématique de ce type, "mot avec alternance consonne-voyelle", pensez-vous qu'il est plus rentable de trouver le pattern regex idéal, ou bien de se diriger plutôt vers une petite fonction PHP ?
    D'une façon plus générale, quand vous tournez-vous vers les regex ?
    Je le fais systématiquement quand j'ai des champs mail, numéro de sécu, numen, rne (les agents DSI de l'éducation nationale sauront de quoi je parle), extrêmement normés, mais pas tellement pour le reste.

    En attendant, je pars travailler la fonction PHP à laquelle je pense pour ce fil, car la problématique est amusante... et je reviens éditer quand je la tiens.

    edit
    Il n'y a pas de petit plaisir. J'ai réussi à faire cette fonction avec un test nickel du premier coup. Suis trop fiérote !

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    function is_vc_alternate_word(string $cur_word){
      //D abord, on passe tout en unicode basique
      $cur_word=\Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')
          ->transliterate(trim($cur_word));
      if(strlen($cur_word)>=2){//il faut au moins 2 lettres pour avoir un début d'alternance !
        $vs=array('a','e','i','o','u','y');
        $cur=0;
        do{
          $next=$cur+1;
          if( in_array($cur_word[$cur],$vs) && ! in_array($cur_word[$next],$vs) ){
            //on laisse pisser le merinos
          }
          elseif(! in_array($cur_word[$cur],$vs) && in_array($cur_word[$next],$vs) ){
            //on laisse pisser le merinos
          }
          else{
            return false;
          }
          $cur++;
        }while($cur<strlen($cur_word)-1);
        return true;
      }
      else{
        return false;
      }
    }
     
    $mot='taratata';
    if(is_vc_alternate_word($mot)){
      echo $mot.' est une alternance de consonnes et de voyelles.<br/>';
    }
    else{
      echo $mot.' n\' est pas une alternance de consonnes et de voyelles !<br/>';
    }
    $mot='o';
    if(is_vc_alternate_word($mot)){
      echo $mot.' est une alternance de consonnes et de voyelles.<br/>';
    }
    else{
      echo $mot.' n\' est pas une alternance de consonnes et de voyelles !<br/>';
    }
    $mot='grosse patate';
    if(is_vc_alternate_word($mot)){
      echo $mot.' est une alternance de consonnes et de voyelles.<br/>';
    }
    else{
      echo $mot.' n\' est pas une alternance de consonnes et de voyelles !<br/>';
    }
    $mot='télémôçuwy';
    if(is_vc_alternate_word($mot)){
      echo $mot.' est une alternance de consonnes et de voyelles.<br/>';
    }
    else{
      echo $mot.' n\' est pas une alternance de consonnes et de voyelles !<br/>';
    }
    //Résultat
    /*
    taratata est une alternance de consonnes et de voyelles.
    o n' est pas une alternance de consonnes et de voyelles !
    grosse patate n' est pas une alternance de consonnes et de voyelles !
    télémôçuwy est une alternance de consonnes et de voyelles.
    */
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Invité
    Invité(e)
    Par défaut
    Hello Dendrite,

    CosmoKnacki est LE grand spécialiste des regex.
    Je ne lui arrive pas au petit orteil.

    D'ailleurs, je réponds aux discussions sur les regex :
    • parce que ça m'amuse de relever le défi, et d'apprendre,
    • mais surtout dans l'attente de la réponse de CosmoKnacki, et de ses explications *, toujours très pédagogiques.

    * Bien que je ne comprenne pas tout... (negative lookaheads,... que je ne suis pas sûr de savoir ré-utiliser)

    Quant à leur utilisation "dans la vie de tous les jours"... Je n'en fait pas grand chose.

    • email (en validation JS), et encore : juste sa forme la plus basique (je pars du principe que les gens doivent se responsabiliser : s'il ne savent pas écrire correctement leur email, c'est leur problème !)
    • téléphone : pour ne garder que le signe + et les chiffres (pas de vérification du nombre de chiffres, qui varie d'un pays à l'autre)
    • ...
    • ou ceux que tu cites, qui sont formellement normalisés.
    Dernière modification par Invité ; 07/09/2019 à 11h48.

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    C'est notre côté asperge (asperger pour les intimes), on adore les trucs qui servent à rien, mais qui sont jouissifs au plan logique.
    La saucisse cosmique est un magnifique modèle d'asperge éminemment sympathique et drôle.
    Un ami pas informaticien m'appelle l'asperge, ce qui me flatte bien sûr. Et quand je lis des saucisses cosmiques ou des rawsrc, je me dis que je suis une grosse patate, pas du tout une asperge... tout est relatif, ma bonne dame. Et puis, les patates, c'est drôlement bon aussi.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Invité
    Invité(e)
    Par défaut

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    j'avais codé une fonction qui faisait la vérification (au cas où) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function checkWordVCOrCVAlternativeness(string $p): bool {
        $word  = \Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate(trim($p));
        $chars = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
        $vowel = ['a', 'e', 'i', 'o', 'u', 'y'];
     
        foreach ($chars as $k => $c) {
            $is_vowel = in_array($c, $vowel, true);
            $expected = $k === 0 ? $is_vowel : ! $expected;
            if ($is_vowel !== $expected) {
                return false;
            }
        }
        return true;
    }
    Mais bon, vu mon niveau en matière de regex, j'ai préféré la jouer discret

  12. #12
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Rien compris...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    mon code se comporte comme le moteur de regex, il s'adapte également au premier type de lettre trouvé (consonne ou voyelle).
    L'idée est de comparer le type de la lettre courante au type attendu d'après l'alternance voyelle/consonne, si ça colle, on passe à la lettre suivante sinon on s'arrête et on renvoie false.
    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
    16
    17
    18
    19
    20
    21
    22
    function checkWordVCOrCVAlternativeness(string $p) {
        // normalisation du mot (suppression des accents en l'occurrence) 
        $word = \Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate(trim($p));
        // éclatement du mot en lettre : compatible unicode
        $chars = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
        // liste des voyelles
        $vowel = ['a', 'e', 'i', 'o', 'u', 'y'];
     
        // pour chaque lettre du mot
        foreach ($chars as $k => $c) {
            // on vérifie si c'est une voyelle
            $is_vowel = in_array($c, $vowel, true);
            // si c'est la première lettre du mot, ce qui est attendu correspond au type de la lettre
            // si ce n'est plus la première lettre, ce qui est attendu doit correspondre à l'alternance : voyelle/consonne
            // donc quand la lettre précédente était une voyelle ($is_vowel = true), la lettre courante doit renvoyer ($is_vowel === false) et inversement 
            $expected = $k === 0 ? $is_vowel : ! $expected;
            if ($is_vowel !== $expected) {
                return false;
            }
        }
        return true;
    }

  14. #14
    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
    Citation Envoyé par ochampi Voir le message
    Merci la bonne solution pour moi c'est la première que tu donnes car soit le mot correspond en un seul bloque soit il n'est pas matcher.
    Attention, les 3 trois patterns renvoient le même résultat.
    Pour bien comprendre la deuxième pattern, il faut garder en tête qu'une pattern (ou une sous pattern) cherche à réussir coûte que coûte.
    Si on considère la sous pattern .*[aeiouy]{2}. Elle commence par .*, ce qui lui donne la possibilité de balayer toute la chaîne pour trouver deux voyelles consécutives.
    Concrètement, comme .* utilise un quantificateur gourmand, il va prendre tous les caractères de la chaîne, [aeiouy]{2} va donc échouer (comme c'est la fin de la chaîne), c'est alors qu'entre en jeu le mécanisme de backtracking qui consiste à obliger le quantificateur précédent à rendre son dernier caractère pour ensuite tester [aeiouy]{2} de nouveau. À chaque échec, le backtracking recommence, ce qui fait que [aeiouy]{2} aura été testé à toutes les positions de la chaîne en partant de la fin jusqu'à avoir trouvé deux voyelles (dans ce cas la sous-pattern réussit et donc le negative lookahead échoue) ou jusqu'à ce que .* n'ait plus de caractères à rendre et que toutes les possibilités aient été épuisées (dans ce cas la sous-pattern échoue et le negative lookahead réussit).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  15. #15
    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
    Citation Envoyé par Dendrite Voir le message
    pensez-vous qu'il est plus rentable de trouver le pattern regex idéal, ou bien de se diriger plutôt vers une petite fonction PHP ?
    Bah le mieux est de choisir ce avec quoi on est à l'aise. Maintenant utiliser une ou des regex n'oblige pas à ne s'en tenir qu'à ça, j'en veux pour preuve la fonction que tu as produite et qui commence par se débarrasser des accents qu'ils soient combinés avec une lettre ASCII ou pas. On pourrait très bien écrire une pattern qui prendrait en compte les accents avec les deux écritures possibles (par exemple le a accent grave U+0061 + U+0300 ou U+00E0), mais ça rallongerai pas mal la pattern; alors qu'avec une petite translittération au préalable, la pattern peut rester courte.

    D'une façon plus générale, quand vous tournez-vous vers les regex ?
    À l'heure de la prière, comme chaque jour ?!

    Je le fais systématiquement quand j'ai des champs mail, numéro de sécu, numen, rne (les agents DSI de l'éducation nationale sauront de quoi je parle), extrêmement normés, mais pas tellement pour le reste.
    Même réponse que jreaux à ce sujet.
    Pour les adresses mails tu peux toujours t'amuser à écrire la pattern de la mort qui tue conforme à la RFC 5322, de toute manière si la syntaxe de l'adresse mail est un peu trop olé olé (genre: !-*_*-!."au pire c'est la 2e à gauche après carrefour montesson"@la.maison.avec.le.nain.de.jardin.et.le.paillasson.welcome.fr), il y a deux chances sur trois que le serveur mail t'envoie balader, et idem en php avec le filtre FILTER_VALIDATE_EMAIL (qui devrait être un peu dépoussièré). Le test ultime reste l'envoie d'un mail de confirmation. Autant juste tester la présence du arobase et qui vivra verra.

    Le numéro de sécu, oui, sauf pour vérifier la clé bien sûr.
    Le numen et le rne ne doivent pas poser de problème pour être validés d'une pattern.

    D'une manière générale, je penche plutôt vers la concision, donc si, en utilisant uniquement une regex ou en utilisant uniquement des fonctions de base, je vois que je vais pondre un brontosaure sur un tas de nouilles, je bascule de l'un à l'autre ou je fait un mix des deux.

    Sinon, j'utilise les regex pour des rechercher/remplacer dans l'ide ou éditeur de texte qui le propose, pour des recherches de fichiers ou autres opérations en ligne de commande sous linux (grep/sed/awk/find), ces outils utilisent des regex bien plus basiques que php (pas de test avant ou arrière, pas de backtracking, pas de récursion, mais ça dépote) et si j'ai vraiment besoin d'une syntaxe plus sophistiquée, j'utilise perl en ligne de commande.

    J'ai réussi à faire cette fonction avec un test nickel du premier coup. Suis trop fiérote !
    Bravi bravo! En tout cas bien joué pour la translittération (<- est-ce que ce mot existe au moins?)!
    Moi j'aurai renvoyé true pour le cas limite de la lettre seule.
    Reste aussi le problème épineux du e dans l'o et du e dans l'a qui, selon wikipedia, constituent des voyelles à part entière (et pas une succession de deux voyelles). Pour la question de départ ça n'a pas d'importance puisque toute la liste de mots du site utilise uniquement les lettres de la plage ASCII donc le problème ne se pose pas, mais pour ta fonction qui accepte les lettres accentuées et les lettres hors plage ASCII, ça n'est pas pareil. Suivant la manière dont tu trancheras la question, il faudra soit modifier la translittération soit les ajouter au tableau de voyelles.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  16. #16
    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
    Citation Envoyé par jreaux62 Voir le message
    Hello Dendrite,

    CosmoKnacki est LE grand spécialiste des regex.
    Je ne lui arrive pas au petit orteil.

    D'ailleurs, je réponds aux discussions sur les regex :
    • parce que ça m'amuse de relever le défi, et d'apprendre,
    • mais surtout dans l'attente de la réponse de CosmoKnacki, et de ses explications *, toujours très pédagogiques.

    * Bien que je ne comprenne pas tout... (negative lookaheads,... que je ne suis pas sûr de savoir ré-utiliser)
    Vilain flatteur! Je tiens à signaler qu'il y a des membres de ce forum qui se baladent en regex et qui sont tapis dans les sections Perl, XSLT, Shell et commandes GNU et sûrement ailleurs d'ailleurs.
    Et moi aussi, ça m'amuse de relever le défi, et j'attends également ma réponse avec impatience.

    Bah qu'est ce qui n'est pas clair avec les negative lookaheads (les tests avant négatifs)?

    D'ailleurs à ce propos, à partir de PHP 7.4 (fin novembre), il sera possible d'utiliser des syntaxes alternatives pour les lookahead et les lookbehind, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var_dump(preg_match('/foo(?=bar)/', 'foobar')); // int(1)
    // ou
    var_dump(preg_match('/foo(*positive_lookahead:bar)/', 'foobar')); // int(1)
    // ou
    var_dump(preg_match('/foo(*pla:bar)/', 'foobar')); // int(1)
    Même chose pour:
    • (?! <=> (*negative_lookahead: <=> (*nla:
    • (?<= <=> (*positive_lookbehind: <=> (*plb:
    • (?<! <=> (*negative_lookbehind: <=> (*nlb:
    .

    Allié à ça, le modificateur x qui permet de commenter en ligne la pattern et qui ignore les espaces (ou mieux encore le nouveau modificateur xx depuis PHP 7.1 qui fait la même chose mais qui ignore les espaces même dans les classes de caractères), permettent d'écrire des patterns beaucoup plus lisibles.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  17. #17
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Reste aussi le problème épineux du e dans l'o et du e dans l'a qui, selon wikipedia, constituent des voyelles à part entière (et pas une succession de deux voyelles). Pour la question de départ ça n'a pas d'importance puisque toute la liste de mots du site utilise uniquement les lettres de la plage ASCII donc le problème ne se pose pas, mais pour ta fonction qui accepte les lettres accentuées et les lettres hors plage ASCII, ça n'est pas pareil. Suivant la manière dont tu trancheras la question, il faudra soit modifier la translittération soit les ajouter au tableau de voyelles.
    Doh, j'étais sûr que tu trouverais un bug...
    Vivement la reforme de l'ortograf qui nous simplifie tout ce bins et nous enleve accent, cedille et voyelles siamoises (quand je tape oeil sur mon clavier, je n'ai pas la touche oe siamois)... Nan, mais je vous jure !

    PS : je suis en train d'apprendre le russe (alphabet cyrillique de 30 lettres + 2 "signes")...
    Il m'a fallu 3 mois pour digérer parfaitement l'alphabet. Contrairement à ce que je pensais, ça n'est pas ça le plus dur. Je peux déchiffrer n'importe quel texte à l'oral, un russe retrouvera à peu près ses petits (mon mari par exemple) même si moi j'y entrave que dalle.
    Pourtant au début, ça déstabilise pas mal, d'autant que le manuscrit est TRES différent de l'écriture d'imprimerie. Exemple savoureux (en manuscrit)
    Comment prononcez-vous ceci
    [rions-un-peu]
    Nom : cursif.jpg
Affichages : 1389
Taille : 6,0 Ko
    [/rions-un-peu]
    Le lexique et les déclinaisons sont plus complexes.

    Ca existe une translittération de TOUTES les écritures du monde (y compris, chinois, thaïlandais, arabe, et j'en passe) qui puisse être universelle et renvoie à une phonétique assez correcte dans chaque langue ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  18. #18
    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
    Citation Envoyé par Dendrite Voir le message
    je suis en train d'apprendre le russe (alphabet de 30 lettres + 2 "signes")...
    Ma connaissance du russe s'arrête à la chanson Boris et Natacha.

    Ca existe une translittération de TOUTES les écritures du monde (y compris, chinois, thaïlandais, arabe, et j'en passe) qui puisse être universelle et renvoie à une phonétique assez correcte dans chaque langue ?
    J'imagine qu'on doit pouvoir tout transformer en API. Je doute qu'on puisse par contre utiliser l'alphabet latin pour recréer des sons qui n'existent pas dans les langues latines.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  19. #19
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    eh bien ce que vous lisez comme lumepamypa devient... litteratoura à l'oral... hihi... avouez que c'est piégeux.
    Et c'est ça qui est dur dans le russe écrit au début, non pas les lettres exotiques, mais les lettres latines qui renvoient vers... d'autres lettres latines. Et c'est particulièrement le cas en écriture cursive. Mais on s'y fait, on se fait à tout avec un peu de temps et de pugnacité. Fin du hors-sujet, pardon.

    revenons à nos voyelles siamoises comme dans exaequo ou oeuf... elles sont où les touches du clavier français qui permettent de les saisir ? Jamais trouvé...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  20. #20
    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
    Pour moi, c'est Alt Gr + a ou Alt Gr + o, mais je suis sous linux et en plus, quelque soit le système utilisé, ça dépend de comment tu as mappé ton clavier. Je crois me rappeler que sous Windows au pire tu peux saisir n'importe quel caractère avec une séquence de touches suivie du code du caractère, mais c'est loin.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [RegEx] Mot composé en vérifiant la longueur
    Par Invité dans le forum Langage
    Réponses: 8
    Dernier message: 16/05/2013, 08h34
  2. Première lettre majuscule d'un mot composé
    Par juliotte dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2009, 15h10
  3. Réponses: 0
    Dernier message: 18/09/2009, 11h55
  4. \hyphenation{un-mot-composé} ? _
    Par kloss dans le forum Mise en forme
    Réponses: 1
    Dernier message: 19/06/2006, 12h44
  5. [HTML] remplissage de ma zone de texte par mot composé?
    Par zorba49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2005, 16h59

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