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

Java Discussion :

Regex vérifier validité


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 51
    Par défaut Regex vérifier validité
    Bonjour, je cherche un moyen via des regexs (sans utiliser de parser xml) d'afficher le contenu de certaine balises xml.
    Par exemple afficher seulement le contenu des balises <c>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <t>
    <c> toto</c>
    <b> tata</b>
    <c> tutu</c>
    </t>
    Je cherche un moyen efficace (pas trop lourd) de le faire parce que l'opération dit être réalisée sur des milliers de fichiers. Les balises sont chacune sur une seule ligne ce qui facilite le truc.
    J'ai vu qu'on pouvait utiliser ce genre de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class RegexTester {
        public static void main(String[] arguments) {
            String ligne= machin.readline();
            try {
                Pattern.compile(userInputPattern);
            } catch (PatternSyntaxException exception) {
                System.err.println(exception.getDescription());
                System.exit(1);
            }
            System.out.println("Syntax is ok.");
        }
    }
    Mais ça me parait lourd et compliqué pour rien.

    Y a t-il un moyen plus simple de faire?
    Un peu comme en perl ou il suffirait de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if ($ligne =~ /^<c>(.*)<\/c>$/) print $1;

  2. #2
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Slt,
    je ne sais pas es-que c'est plus rapide avec cette méthode, mais l'utilisation d'un parser tel que JDOM, c'est le plus optimal a ma conaissance
    Bon courage

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 51
    Par défaut
    Je préfère éviter d'utiliser un parser (comme précisé), notamment parce que beaucoup de fichier sont des fichiers xml mal formés (il peut y avoir des "<" et des "&" dans le texte entre les balises) et ne peuvent donc pas êtres parsé.

  4. #4
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Et ben dans ce cas la, la class Pattern possède une méthode static matches, qui prend comme arguments l'expression régulière, et la chaine a testé, et qui renvoi true s'il y a une correspondance, sinon, elle va renvoyer un false
    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String ex_reg = "[0-9]+";
    String texte = "5";
    if (Pattern.matches (ex_reg, texte))
       System.out.println ("Est un entier");
    else
      System.out.println ("N'est pas un entier");

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    String aussi contient une méthode matches -_-°.

    Il suffit de faire ligne.matches(".*<c>.*</c>.*").

    Bien sûr, s'il faut le faire sur beaucoup de lignes, cette syntaxe courte n'est pas très efficace. Il vaut mieux compiler d'abord la regex en un Pattern, et vérifier la conformité à ce Pattern avec pattern.matcher(ligne).matches.
    Ce qui du coup n'est plus si simple, mais faut choisir ce qu'on veut. Perl ça a jamais été un cador de performances.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [REGEX] Vérifier un nom et un prénom
    Par womannosky dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 22/04/2009, 16h47
  2. [c#, vs2005, WinForms]Vérifier validité adresse mail
    Par Filippo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/06/2007, 09h10
  3. Vérifier validité date
    Par Morpheus2144 dans le forum Langage
    Réponses: 8
    Dernier message: 26/05/2006, 00h44
  4. [Regex] Vérifier un texte avec accents
    Par supermanu dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/10/2005, 15h29
  5. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22

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