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 :

regexp et priorité


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut regexp et priorité
    Bonsoir,
    Je travaille sur une String contenant des balises XML.
    Je cherche à reconnaitre certains schémas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t<ind>test</ind> avec <ind>une</ind> suite
    Ici mon but serait d'extraire :
    Pour isoler le texte non balisé.

    J'utilise la regexp suivante : <ind>.*</ind>
    ca fonctionne bien, mais je viens de m'apercevoir que ca fonctionne un peu trop bien puisque pour l'exemple si dessus il me retourne
    A cause de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t<ind>test</ind> avec <ind>une</ind> suite
    Peux t'on faire en sorted'eviter ce probleme ?

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Attention que les regex ne sont pas souvent le bon outil pour analyser le xml ; elles marchent bien seulement pour les xml les plus simples.

    Dans ton cas, essaie :
    <ind>.*?</ind>
    ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    oui ca fonctionne mieux mais ce n'est pas encore ca Pour ce code, il trouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t<ind>test</ind> avec <ind>une<ind>deux</ind></ind> suite
    Si le regexp n'est pas la meilleure maniere de fonctionner, quelle est elle ? utilisez des languages genre XPATH ?

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Déjà, dans ton nouvel exemple, qu'est censé rendre la recherche ?

    Toujours est-il que à ma connaissance les regexp ne te donneront pas facilement la solution. Il faut passer pour cela par les API XML.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Je souhaite trouver toujours les positions extremes.
    Donc pour l'exemple ci dessus un resultat correct serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t<ind>test</ind> avec <ind>une<ind>deux</ind></ind> suite
    dans un autre cas cela serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t<ind>test</ind> avec <ind>une<ind>deux<ind>trois</ind></ind></ind> suite
    j'ai besoin de connaitre les positions dans la string, je n'ai rien vu dans les API xml qui permettent cela c'est pour ca que je me suis tourné vers les regexp ...

  6. #6
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Tu peux l'avoir par SAX et le Locator.

    Cependant, regarde s'il n'y pas d'autres API XML qui seraient plus adaptées, hors JDK, ou plus faciles de ce coté là.

    Coté regex, encore une fois, c'est pas le bon cheval, sauf à disposer d'un XML où l'on peut limiter les cas analysés.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Tu peux l'avoir par SAX et le Locator.

    Cependant, regarde s'il n'y pas d'autres API XML qui seraient plus adaptées, hors JDK, ou plus faciles de ce coté là.
    Je vais jeter un oeil, merci pour le lien

    Citation Envoyé par gifffftane Voir le message
    Coté regex, encore une fois, c'est pas le bon cheval, sauf à disposer d'un XML où l'on peut limiter les cas analysés.
    Qu'entends tu par limiter ? Je connais de nombreuses choses sur le XML utilisé, par exemple les balises que l'on peut trouver ainsi que leur forme et attributs. Ici je cherche à gérer le fait que l'on peut avoir plusieurs indice (balise ind) imbriqués. Je n'ai que 4 balises qui ont ce comportement, tout le reste de l'analyse fonctionne par regExp, il ne reste que le probleme que je t'ai posé ci dessus.

  8. #8
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    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 690
    Par défaut
    Malheureusement le cas que tu expose est typiquement le type de cas sur lequel tu vas bloquer avec une regex. Je ne crois par qu'il soit possible de faire une correspondance d'éléments 2 a 2.

  9. #9
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Limiter, c'est à dire être sûr que le XML reste compatible avec une analyse regex, qu'il n'y ait pas besoin d'une sorte d'historique des motifs (de la séparation classique lex / yacc, soit syntaxe / grammaire, qu'il n'y ait pas de grammaire). Ici l'imbrication est très difficile à traiter en regex.

    Si je VEUX le faire tout de même, alors je fais une regex avec des groupes matchant le OU de début et fin du motif, je parcours ma chaîne avec un find, et je réagis selon que je trouve un début ou une fin ; à la fin j'ai le global comme tu le souhaites, mais ça ne marche que s'il y a pas de commentaires ou autre dans le XML.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Limiter, c'est à dire être sûr que le XML reste compatible avec une analyse regex, qu'il n'y ait pas besoin d'une sorte d'historique des motifs (de la séparation classique lex / yacc, soit syntaxe / grammaire, qu'il n'y ait pas de grammaire). Ici l'imbrication est très difficile à traiter en regex.

    Si je VEUX le faire tout de même, alors je fais une regex avec des groupes matchant le OU de début et fin du motif, je parcours ma chaîne avec un find, et je réagis selon que je trouve un début ou une fin ; à la fin j'ai le global comme tu le souhaites, mais ça ne marche que s'il y a pas de commentaires ou autre dans le XML.
    Oui c'est comme ca que je procède pour un certain nombre de balises,
    je recupere un motif ouvrant et fermant
    et je parcourt la liste retournée par les deux find() pour trouver les extremum.
    Ensuite par récursivité, je prends la String contenus entre les deux extremums et je recommence.
    Je vais voir pour appliquer ce principe ici dans un premier temps (car je suis un peu pressé pour rendre ce travail ), mais je me pencherai sur les moyens d'utiliser une API XML pour localiser les positions des balises dans une String (ca simplierait surement grandement mon algo ...).
    Si quelqu'un passe par ici et à d'autres informations à ce sujet je suis preneur.

    Merci à vous deux pour vos réponses

  11. #11
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Voici une regex qui pourrait te plaire (perl-compatible, mais ça devrait aller sous java):
    Elle ne passe pas sur le coup des balises imbriquées, mais le reste est ok. Tu ne peux pas faire de récursivité, à ma connaissance, avec des regex, donc ce que tu cherches à faire est impossible.

    Mais de fait, un parsing xml serait surement plus simple.

    PS: tu pourrais trouver mon petit outil intéressant
    http://aspyct.org/doku.php?id=lurt
    Il requiert hélas Perl et PerlGtk

Discussions similaires

  1. [C#] Configuration du niveau de priorite des processus
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/04/2007, 23h29
  2. [VB6] Forçage de la priorité d'un processus Windows
    Par okyle dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2004, 11h27
  3. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  4. regexp
    Par mathieu gérard dans le forum ASP
    Réponses: 4
    Dernier message: 02/10/2003, 18h05
  5. Priorité de recherche des DLLs
    Par patapetz dans le forum Windows
    Réponses: 3
    Dernier message: 10/09/2003, 18h44

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