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 Java Discussion :

[Regexp] expressions regulieres et commentaires


Sujet :

Langage Java

  1. #1
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut [Regexp] expressions regulieres et commentaires
    Bonjour,

    Je galaire actuellement pour suprimer des commentaires d'une chaine...

    Je met toutes les ligne d'un .txt dans une chaine et j'y applique ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s = s.replaceAll("/\\*([^\\*]*\\*[^/])*/", "") ;
    Cela marche, sauf si il y a une * au milieu du commentaire...

    Merci de votre aide, Floanne.

    [ Modéré par Bulbo ]
    Ajout d'un tag dans le titre
    Les Règles du Forum

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Avec cette ligne ca marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s.replaceAll("/\\*(([^\\*]*)|(\\*[^/]?))*\\*/", "")
    Teste-la avec plus de cas que moi car je ne suis pas 100% sur du (\\*[^/]?) mais ca a marche pour les cas communs que j'ai essaye.
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut merci
    Merci !

    J'ai testé et ça marche tres bien : merci !

    A plus, Floanne.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Bonjour !

    Est ce que quelqu'un pourrait juste expliquer en deux mots comment comprendre le premier paramètre du replaceAll, svp ?

    merci

  5. #5
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    salut !

    Alors deja va voir l'aide java : http://java.sun.com/j2se/1.5.0/docs/api/ (classe Pattern).

    sinon , / veut dire que l'on recherche le caractaire slache
    \\* veut dire que l'on recherche le caractaire * qui est un caractaire speciale d'ou le \\ (un pour \*, l'autre pour le \ qui est aussi un caractaire spéciale)
    [^\\*]* veut dire que l'on recherche tous sauf le caractaire * autant de fois que possible

    etc.

    Floanne.

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Merci Floanne (et gfx).

    En fait ça m'interressait car j'ai posté il y a peu le message suivant :

    Bonjour,

    Pour rechercher la première occurence de "toto" dans une String str, je fais :

    String target="toto";
    int index=str.indexOf(target);

    Jusque là pas de problème (balèze le gars hein ? )

    Maintenant, je veux trouver la première occurence de indifférement "toto1" "toto2" ...."totoX".
    Suis-je obligé de passer par les expressions régulières (regex, matcher et compagnie), ou bien y-a-t'il possibilité d'utiliser la méthode ci-dessus, et si oui, quel serait le target correspondant ?

    Merci de votre aide
    Et là, j'ai bien l'impression que contrairement à ce qu'on m'a dit alors, la manip est possible sans passer par "matcher" etc...
    Je vais potasser ton lien..

    Merci, bonne journée

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Oui tu peux utiliser la methode matches() de la classe String. Tu ferais un truc du genre maString.matches("toto.");
    Romain Guy
    Android - Mon livre - Mon blog

  9. #9
    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 absolut75
    Et là, j'ai bien l'impression que contrairement à ce qu'on m'a dit alors, la manip est possible sans passer par "matcher" etc...
    C'est pas complètement faux puisque replaceAll() utilise "matcher" en interne...

    a++

  10. #10
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut probleme
    ca marche avec ça :

    /**********************************
    ** Texte relatif **
    ** au nombre d'alarmes. **
    **********************************/

    /* Titre */
    Nombre d'alarmes dues à :

    ... la suite de mon .init

    et pas avec ça :

    /************************************
    ** texte relativf à **
    ** la fenetre de configuration. **
    ************************************/

    /* Titre */
    CONFIGURATION

    ... la suite de mon .init

    Dans le deuxième cas si je ne met pas /* Titre */ on dirait que ça boucle : le cpu calcul a fond est le prog se fige...
    Et si je le met j'obtient /*************** à la place du titre...

    Si quelqu'un a une idée...

    Floanne.

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 86
    Points : 49
    Points
    49
    Par défaut
    Bon ca y est, je crois que j'ai compris :

    replaceAll ou matches de la classe String peuvent prendre en argument des "String regex", et utilisent pour ça en interne des "matcher"...

    Ce n'est malheureusement pas le cas de indexOf, et matches() renvoie juste un booleen.

    Je suis donc cuit :-) et j'aurais mieux fait de me taire.

    Merci. a+

  12. #12
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Floanne : C'est du a la nature des moteurs de regex. Le bouquin dont j'ai colle la couverture explique en details les differences entre les 2 (3 en fait) sortes de moteurs de regex (NFA et DFA), et pourquoi tu peux les faire "boucler a l'infini" parfois. En fait ils ne bouclent pas vraiment a l'infini, ils mettent juste quelques milliards d'annees a finir le calcul Plus serieusement c'est ce que je craignais avec la reponse que je t'ai donne.

    Essaye avec ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s.replaceAll("/\\*(([^\\*]*)|(\\*[^/]))*\\*+/", "")
    Romain Guy
    Android - Mon livre - Mon blog

  13. #13
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut merci
    Merci Gfx : ça ne sature plus le cpu...

    Quand au deuxième problème (/*********** à la place du titre): c'etait du à une autre erreur dans mon prog...

    ++ Floanne.

Discussions similaires

  1. Expression reguliere pour enlever les commentaires
    Par fafoula dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/07/2008, 10h00
  2. Réponses: 9
    Dernier message: 07/08/2007, 14h26
  3. [RegExp] Problèmes expressions régulières
    Par Bluespike62 dans le forum Langage
    Réponses: 34
    Dernier message: 07/02/2006, 12h33
  4. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  5. [langage] expression reguliere motif répétitif dans 1 pattern
    Par comme de bien entendu dans le forum Langage
    Réponses: 11
    Dernier message: 09/04/2003, 16h14

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