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 :

expression qui valide phrase ayant une syntaxe précise


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur Indépendant en IA
    Inscrit en
    Août 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Chercheur Indépendant en IA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 10
    Points : 0
    Points
    0
    Par défaut expression qui valide phrase ayant une syntaxe précise
    Bonjour.

    Je vous prie de m'aider à écrire une expression régulière.

    Je veux écrire une expression régulière qui me permettra de reconnaitre une séquence de mots correspondant à une syntaxe.
    Voici la syntaxe qui doit servir de modèle (pattern)

    X = Y . où X et Y sont des variables à substituer et le caractère = doit toujours être présent.

    En fait , je veux identifier tous les mots ayant 1 ou plusieurs mots, suivi du signe "=", lequel est suivi d'1 ou plusieurs mots.

    Ainsi la séquence "tomber=chuter" , est reconnu par par mon modèle
    "de naissance = inné" , est aussi reconnu par mon modèle.

    Par contre "je vous écris" n'est pas reconnu, car il n 'y a pas le caractère =
    De même "je suis =" ne sera pas reconnu.

    Quel doit être l'expression régulière qui me permettra de reconnaitre une séquence de mots correspondants à ma syntaxe ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155

  3. #3
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    L’ennui avec ^.+=.+$ c’est qu’elle donnera son feu vert même pour une chaîne contenant plus d’un signe =
    ce qui n’est peut être pas valide.





    Il n’y a pas besoin des expressions régulières.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if substr_count(chaine, ’=’) == 1
    suffit

  4. #4
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str='De naissance=Inné';
    if(@preg_match('/^([^=]+)=([^=]+)$/',$str,$reg)){
    	print_r($reg);
    }
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array
    (
        [0] => De naissance=Inné
        [1] => De naissance
        [2] => Inné
    )
    Mais c'est vrai qu'il n'y a pas véritablement besoin des expressions rationelles.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n’y a pas besoin des expressions régulières.
    Un = tout seul valide ton test, il faudrait donc ajouter d'autres tests, donc autant utiliser une expression régulière.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Un = tout seul valide ton test
    Bonne objection, Votre Honneur.

    il faudrait donc ajouter d'autres tests
    Pourquoi « d’autreS testS » ?
    Un seul suffit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if substr_count(chaine, ’=’) == 1 and strlen(chaine) > 2:
    Mais c’est comme pour la demande d’une expression régulière : il faut savoir remettre en question les demandes.
    Donc je conteste le « ajouter d’autres » et je propose:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if substr_count(chaine[1:-1], ’=’) == 1:
    Nota: la notation [1:-1] enlève les premier et dernier caractères , en Python. Ce n’est peut être pas ça en PHP. Je ne me rappelle plus, mais voilà l’idée.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je disais d'autres tests en imaginant que notre demandeur, dont on n'a plus de nouvelles, allait ajouter des restrictions à son besoin.

    Après c'est sur que c'est au gout de chacun.

  8. #8
    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 : 50
    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
    Si le problème est juste sur le nombre de "=", la solution est assez simple

    Code php
    :
    Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $reg = '/^([^=]+)=([^=]+)$/';
     
    $str = 'foo=bar';
    preg_match ($reg, trim($str), $m);
    //l'utilisation de trim() purge le cas limite des espaces blancs avant ou après le =
    print_r ($m) ;

Discussions similaires

  1. [2.x] Formulaire qui change lors d'une action précise
    Par Vrugar dans le forum Symfony
    Réponses: 0
    Dernier message: 26/11/2012, 14h32
  2. [RegEx] Expression qui ne contient pas une chaine
    Par coupolites dans le forum Langage
    Réponses: 5
    Dernier message: 02/03/2010, 10h07
  3. Rechercher un fichier ayant une donnée précise
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 13/05/2009, 08h13
  4. Réponses: 2
    Dernier message: 09/10/2006, 19h33

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