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 :

problème d'expressions régulières.


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut problème d'expressions régulières.
    Bonjour,
    j'ai un petit problème avec des expressions régulières.

    je n'arrive pas a selectionner un text et trouver la première ocurence de ma balise de fin.

    je m'explique j'aimerai colorer le code dans un petit éditeur de text et je n'arrive pas à colorer les /* text */

    voici l'expression régulière que j'ai utilisée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pattern pattern = Pattern.compile("/\\*" + ".+" + "\\*/",
    				Pattern.DOTALL | Pattern.MULTILINE);
    le petit défaut c'est que si il y a plusieurs fois la balise il me trouve la balise fermante de manière un peu aléatoire.

    y a-t-il un moyen pour être certain que l'expression régulière match la première occurence de la balise fermante?

  2. #2
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    L'expression .+ prendra la chaine la plus grande, et englobera donc plusieurs fin de commentaire s'il y en a...

    Pour éviter cela il faut utiliser les Reluctant quantifiers qui rechercheront la chaine correspondante la plus petite : .+? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pattern pattern = Pattern.compile("/\\*" + ".+?" + "\\*/",
    				Pattern.DOTALL | Pattern.MULTILINE);
    a++

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    merci beaucoup ça fonctionne.

    et ça va enfin me permettre d'avancer

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    en fait j'ai encore une petite question.
    je voulais colorer les chaînes de caractères entre guillemets alors ça fonctionne si il n'y a pas d'anti-slash avant le guillement mais je n'ai pas réussi à trouver le moyen de faire en sorte qu'il ne match pas si il y a un anti-slash juste avant.

    j'ai testé plusieurs expressions régulières et recherché pas mal mais je n'ai rien trouvé de vraiment correcte et la majorité ne prennent justement pas en compte les anti-slash.

    j'espère que c'est suffisament claire.

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Tu peux utiliser les constructions spéciales pour cela, comme par exemple (?<!X)Y qui vérifie que l'élément Y n'est pas précédé de X...

    Ce qui donne en Java pour une double quote non-précédé d'un anti-slash : ?<!\\\\)\"

    (voir : Pourquoi dois-je doubler/quadrupler le caractère anti-slash ('\') ?).

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	String str = "s = \"Hello \\\"World\\\"\" + \"\" + \" !!! \";";
     
    	Pattern pattern = Pattern.compile("(?<!\\\\)\"(.*?)(?<!\\\\)\"");
     
    	// On affiche la chaine en entrée :
    	System.out.println(str);
    	System.out.println();
     
    	// On recherche toutes sous-chaines :
    	Matcher matcher = pattern.matcher(str);
    	while(matcher.find()) {
    		System.out.println("\t[" + matcher.group(1) + "]");
    	}
    Ce qui donne comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    s = "Hello \"World\"" + "" + " !!! ";
     
    	[Hello \"World\"]
    	[]
    	[ !!! ]
    a++

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Par défaut
    merci beaucoup en faite j'avais essayé avec (?!) comme j'avais lu dans un tuto mais avec le < ça marche parfaitement.

    j'ai juste remplacé le .*? par .+? comme ça même si les guillemets se suivent ça les match quand même.

    en tout cas merci

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

Discussions similaires

  1. petit problème d'expression régulière
    Par stoyak dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 11h20
  2. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33
  3. Problème d'expression régulière
    Par SiM07 dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 17h57
  4. Problème d'expression régulière
    Par Pymm dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 11/10/2005, 15h04
  5. Problème d'expression régulière
    Par Neitsa dans le forum Général Python
    Réponses: 3
    Dernier message: 11/08/2005, 14h29

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