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 :

Même caractère casse différente ( en back reference ) [RegEx]


Sujet :

Langage PHP

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut Même caractère casse différente ( en back reference )
    Bonjour !

    Est-il possible de matcher une suite de caractères en minuscules suivie de la même chaine en majuscules ?

    exemples
    ok
    ccc_CCC
    foo_FOO


    ko
    ccc_FOO
    ccc_CcC
    ccc_ccc

    Je peux le faire avec en parsant les matches en php, mais directement en php existe-t-il une possibilité de modification de casse du backréférence ?


    ([a-z]{3})_\1<<<< là le \1 je le voudrais en MAJUSCULES !
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Salut SpaceFrog,


    Je pense que tu peux faire ceci : \1{Lu}

  3. #3
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Très bonne question... La réponse est assez simple, mais astucieuse xD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^([a-z]{3})_(?=[A-Z]{3})(?i:\1)$
    DEMO

    Les crédits reviennent à HamZa qui a trouvé par accident... lol
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

  4. #4
    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
    Si c'est pour rechercher dans une chaîne plus grande, tu peux utiliser ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \b([a-z]+)_(?=(?i)\1\b)[A-Z]+
    Le word boundary \b pouvant être remplacé par ce qui t'arrange.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Merci batis et HamZa, je tournais autour d'un truc du genre sans pouvoir mettre le doigt dessus !
    Belle astuce ...

    SpaceSaussage => pour le matcher dans une chaine je passerais plutôt par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \b([a-z]{2})_(?=[A-Z]{2})(?i:\1)\b

    Sauf que ... je me suis réjoui un peu trop vite le (?i: ) ne semble fonctionner que pour .net, pas pour php
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Ooops, la demo contenait un mauvais lien... corrigé !

    Normalement ça devrait fonctionner sous php, sinon au pire tu remplaces (?i:\1) par (?i)\1 => tous ce qui suivra le (?i) sera matché en minuscule)
    Une réponse utile vous a aidé ? N'oubliez pas le
    Votre problème est résolu ? N'oubliez pas le

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    J'ai testé les deux syntaxes, mais malheureusement aucune des deux ne semble vouloir passer avec php

    $chaine=' sqdf ccc_CCC qds f';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    preg_match_all("~\b([a-z]{3})_(?=[A-Z]{3})(?i:\1)\b~",$chaine,$matches);
    var_dump($matches);
     
     
    preg_match_all("~\b([a-z]{2})_(?=[A-Z]{2})((?i)\1)\b~",$chaine,$matches);
    var_dump($matches);
    pas d'erreru de syntaxes sur la reg, mais rien dans le $matches
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Juste un petit souci de syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $chaine=' sqdf  fr_FR qds f';
    preg_match_all("~([a-z]{2})_(?=[A-Z]{2})(?i:\\1)~",$chaine,$matches);
    var_dump($matches);
    ça fonctionne impec de la sorte !

    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $chaine=' sqdf  fr_FR qds f';
    preg_match_all("~([a-z]{2})_(?=[A-Z]{2})((?i)\\1)~",$chaine,$matches);
    var_dump($matches);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $chaine=' sqdf  fr_FR qds f';
    preg_match_all("~([a-z]{2})_(?=[A-Z]{2})((?:(?i)\\1))~",$chaine,$matches);
    var_dump($matches);
    Il semblerait donc que (?i:\\1) soit une factorisation de ((?:(?i)\\1)
    Mais du coup (?i) ouvrant le mode case insensitive ... il ne faut pas oublier éventuellement de le refermer àprès en case de continuation de la regexp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '~([a-z]{2})_(?=[A-Z]{2})((?i:\1)(?-i))~'
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    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
    Mais du coup (?i) ouvrant le mode case insensitive ... il ne faut pas oublier éventuellement de le refermer àprès en case de continuation de la regexp
    En fait non dans ton cas (et pas forcément en général), car la portée d'un modificateur inline ne dépasse pas le groupe dans lequel il est utilisé (sauf avec le module re en Python).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/08/2010, 12h15
  2. Réponses: 5
    Dernier message: 29/11/2006, 21h10
  3. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  4. Réponses: 4
    Dernier message: 07/03/2006, 15h54
  5. Réponses: 7
    Dernier message: 12/05/2003, 22h50

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