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

Collection et Stream Java Discussion :

[REGEX] expression régulière qui match tout les nombres sauf un


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut [REGEX] expression régulière qui match tout les nombres sauf un
    Bonjour,

    Je cherche à écrire une expression régulière en java qui match une chaine suivi de n'importe quel nombre sauf un. Cela parait tout bête mais je n'arrive pas du tout à le faire.

    Je voudrais par exemple que mon expression matche avec
    test = 112

    mais refuse
    test = 111.

    Sauf que si j'essaye quelque chose du genre "test = [^111]" je me retrouve avec une expression régulière qui accèpte tout sauf des 1, quel que soit leur nombre...

    Est ce qu'il est possible de définir une "chaine" à exclure d'un ensemble (en l'occurence l'ensemble des nombres entiers), et si oui comment?

    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 570
    Points : 15 535
    Points
    15 535
    Par défaut
    je dirais .*[^1]

  3. #3
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par Uther Voir le message
    je dirais .*[^1]
    Je rajouterai le caractère de fin afin d'etre le plus précis
    .*[^1]$

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par zorm Voir le message
    Je rajouterai le caractère de fin afin d'etre le plus précis
    .*[^1]$
    J'ai failli poster la même réponse, mais c'est vrai que je ne vois pas pourquoi ça ne marcherait pas sans le $, vu qu'on ne spécifie rien d'autre derrière... As-tu un contre-exemple qui ferait "planter" le .*[^1] ?

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par DevTeam_ Voir le message
    J'ai failli poster la même réponse, mais c'est vrai que je ne vois pas pourquoi ça ne marcherait pas sans le $, vu qu'on ne spécifie rien d'autre derrière... As-tu un contre-exemple qui ferait "planter" le .*[^1] ?
    Si on utilise la méthode matches(), $ (fin de la chaine) est inutile, tout comme le ^ (début de la chaine). En effet la méthode matches() vérifiera toute la chaine dans tous les cas...


    a++

  6. #6
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,



    Si on utilise la méthode matches(), $ (fin de la chaine) est inutile, tout comme le ^ (début de la chaine). En effet la méthode matches() vérifiera toute la chaine dans tous les cas...


    a++
    Impec, merci pour l'explication !

  7. #7
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Certes, dans la mesure où on utilise la méthode matches. Maintenant s'il souhaite étendre son application et utiliser split par exemple. A ce moment, il n'est plus négligeable de mettre ou non les caractères de fin et de début.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Je crains que le titre ne vous ait induis en erreur. Ce n'est pas le chiffre 1 que je souhaite exclure mais un nombre (ex: 111). Hors [^111] équivaut à tous sauf 1 ou 1 ou 1 alors que je souhaiterai tout sauf 111.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 43
    Points : 52
    Points
    52
    Par défaut
    Pourquoi cherches tu absolument une expression régulière ? Ne serait ce pas plus simple d'avoir une méthode Java qui utilisera la méthode lastIndexOf de la classe String ?

  10. #10
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    [^(111)]

    Mais ça évitera également les nombres commes 1110 ou 21113

    (^|\D)[^(111)](\D|$)

    Ici, on prend très précisément 111 et on regarde ce qu'il y a autour. Est-ce un début de chaîne ou un caractère non-numérique avant le nombre ? Est-ce une fin de chaîne ou un caractère non-numérique après le nombre ?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Points : 165
    Points
    165
    Par défaut
    Désolé de répondre si tard mais j'étais passé sur une autre tâche urgente et je n'ai pas eu le temps de repasser.

    @baos: j'ai besoin d'une expression régulière car la chaine à rechercher change et doit être écrite dans un fichier extérieur au programme.

    @alceste: avec cette expression régulière 122 ne passe pas non plus puisqu'il y a un 1 dans le premier caractère.

    @dingoth: Merci pour ta réponse qui me semble être la plus proche de ce que je cherche. Un collègue à cependant réussi à trouver une autre notation qui doit être équivalente: (?!111). Je suis surpris que l'opérateur ! fonctionne puisqu'il n'est pas détaillé dans la javadoc regex mais pourtant ça fonctionne.

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

Discussions similaires

  1. Expression régulière qui engloberait tous les cas
    Par amazigh42 dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 09/08/2013, 09h53
  2. Réponses: 1
    Dernier message: 15/03/2013, 17h26
  3. [RegEx] Expression régulière qui fait tout planté !
    Par Adams93 dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2012, 11h03
  4. [RegEx] Expression régulière qui supprime les []
    Par ipeteivince dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2010, 14h02
  5. [Regex] Expression régulière qui ne passe pas avec \.
    Par jsd03 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 10/03/2009, 16h49

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