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] Déspécialisation des caracteres


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut [Regex] Déspécialisation des caracteres
    Bonjour,

    je code en java depuis peu et j'ai besoin pour la première fois des Regex (que je ne connaissais quand shell).

    Je cherche à déterminer si une String contient des caractères "interdit" (qui ne soient pas : 1-9, +, -, *, /, ^, "exp", et l'espace).

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private static Pattern symbole = Pattern.compile(" ^ ( \d \+ - \( \) \* / (exp) \^ \t ) " );
    private String expression;
     
    ...
     
    private boolean fct() {
     
    		Matcher matcher = symbole.matcher(this.expression);
    		return matcher.find();
    }
    Le problème c'est que je ne peux pas compiler les \d et autres :

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
    Quelle syntaxe utiliser pour désigner les caractères '+', '-', [0-9] ... ?

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Tu dois despécialiser les charactères dans le pattern.

    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
    public class RegexpTest {
        private static Pattern p = Pattern.compile("(?:[0-9\\+\\-\\*/\\^\\s])|(?:exp)");
     
        /**
         * @param args
         */
        public static void main(String[] args) {
     
            checkFound("a+b");
            checkFound("aexpb");
            checkFound("a_valid_string");
        }
     
        private static void checkFound(String str) {
            Matcher m = p.matcher(str);
     
            if (m.find()) {
                System.out.println("string: " + str + " contains forbidden charcaters");
            } else {
                System.out.println("string: " + str + " is valid");
            }
        }
    }

  3. #3
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Merci !

    J'avais pas pensé aux crochets et qu'il fallait mettre deux fois les antislash.

  4. #4
    Membre actif
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Par défaut
    Encore moi !

    Bon j'ai définitivement un problème avec les Regex .

    Je veux tester les caractères '(' et ')' ; les parenthèses quoi !

    J'ai testé pas mal de possibilité, mais impossible de trouver la bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String s="("
     
    s.matches( "\\(" );     //(renvoie faux)
    s.matches( "(");     //(plante)
    s.matches( "[\\(]*" );     //renvoie faux
    Comment tester les parenthèses ?
    Sachant que je veux ensuite pouvoir les intégrer dans des regex plus complexes, du genre :

    s.matches( parentheseOuvrant+"[1-9]\\+[1-9]"+parentheseFermante);


    Edit : dans la réponse précédente les parenthèses sont bien détectées (grâce à la syntaxe "(?: [...] )" que je comprends pas trop ), mais je n'arrive pas à en tirer un regex juste pour les parenthèses.

Discussions similaires

  1. [Encodage] codage des caractères spéciaux
    Par soulhouf dans le forum Général Java
    Réponses: 11
    Dernier message: 24/08/2005, 12h07
  2. Analyseur XML : extraction des caracteres spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/07/2005, 15h07
  3. Réponses: 17
    Dernier message: 12/04/2005, 15h28
  4. [langage] compter des caracteres dans une chaine
    Par louisis dans le forum Langage
    Réponses: 3
    Dernier message: 18/05/2004, 22h39
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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