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 :

[Expression régulière] exclusion de chaînes


Sujet :

Collection et Stream Java

  1. #1
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut [Expression régulière] exclusion de chaînes
    Salut à tous,

    j'ai un petit soucis de syntaxe de mon expression régulière.

    mon but est de chercher des balises qui s'ouvrent puis se ferment sans ouverture ni fermeture de balise similaire à l'intérieur.

    voila ce que j'ai écrit : (exemple avec nom de balise = tag)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <tag>[^(<tag>)|(</tag>)]*</tag>
    j'ai tenté pas mal de variantes sans succès.

    Merci d'avance

  2. #2
    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,


    Je ne sais pas si c'est faisable seulement avec une regexp...
    Quel est l'objectif final de tout cela ?

    a++

  3. #3
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    c'est pour faire des traitements sur un fichier XML, j'ai aussi la solution de passer par du DOM mais je test différentes solutions.

    j'ai déjà utilisé une regexp assez proche qui détecte les balises, je pensais pouvoir l'adapter :
    Merci adiGuba !

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    Comme adiGuba, je crois pas que les RegExp vont suffire pour ce cas là ... il te faut un parser en plus du lexer.

  5. #5
    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
    C'est pour cela qu'il faudrait savoir quels traitements tu veux faire...


    a++

  6. #6
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    le but est de repérer les balises qui s'ouvrent et se ferment pour les supprimer (avec leur contenu).

    l'objectif global est de scinder un fichier XML (MathML) en deux parties.

    en gros si on a une fonction qui supprime ça et qui se nomme maFonction, on a :

    fichier XML 1 = 1ère partie + maFonction( deuxièmePartie)
    et
    fichier XML 2 = maFonction( 1ère partie ) + deuxièmePartie


    je pensai que c'était une regexp classique mais bon, désolé je connais pas plus que ça donc si c'est pas possible ..

    j'ai une solution de remplacement à coup de indexOf et subString mais je doute des perf de mon code.


    Merci de l'attention que vous portez à mon problème

  7. #7
    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
    Il serait peut-être plus simple de passer par une API XML...

    Quel est le format de ton XML ? Et des fichiers que tu veux obtenir ?

    a++

  8. #8
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Théoriquement les regex permettent de trouver le texte répondant à la question, en effet si on crée une grammaire associée à la propriété elle ne requert "pas de mémoire" (ça commence par une baluise ouvrante et ça finit par une fermante et je ne vois rien de similaire entre les deux : pas besoin de compter par exemple) mais je crois qu'il sera plus facile d'utiliser le parser XML fourni avec l'api standart.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  9. #9
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Il serait peut-être plus simple de passer par une API XML...
    Citation Envoyé par Razgriz Voir le message
    je crois qu'il sera plus facile d'utiliser le parser XML fourni avec l'api standart.
    pour mon objectif global il y deux solutions, le parser et le traitement de chaine.

    Pour la solution du traitement de chaine, j'aurai besoins d'une fonction qui effectue ce que j'ai décris plus haut,
    et je vais forcément ne pas utiliser un parser ..
    et si vous regardez mon explication vous voyez que le traitement se fait sur une partie du XML donc on ne pourrait pas faire manger ça au parser.
    (et puis si c'était un fichier entier et qu'on supprime les balises qui s'ouvrent et se ferment ben on a plus grand chose à la fin )

    En fait ce n'est pas sur la méthode à employer que je vous demande de l'aide mais sur le point précis de la regexp.


    Citation Envoyé par Razgriz Voir le message
    Théoriquement les regex permettent de trouver le texte répondant à la question
    et bien je n'ai toujours pas trouvé la solution pour traduire "n'importe quelle chaine qui ne contient par telle chaine".

    J'ai essayé pas mal de choses avec un collègue qui connaissait mieux que moi mais en vain, et tenant compte des avis des membres de dvp je pense qu'en pratique les RegExp ne permettent pas cela. (mais je mettrai pas le tag résolu de suite, c'est mon coté optimiste)


    Merci à tous

  10. #10
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    La difficulté réside dans l'expression du "not" : ne contient pas.
    Tu as un ensemble A de caractères susceptibles d'être rencontrés dans ta chaîne, et tu veux qu'un ensemble B contenu dans A n'apparaisse pas à un certain endroit de ta chaîne. Les caractères autorisés à cet endroit sont donc les caractères de A \ B.

    Avec de vraies expression régulières (définition formelle par récurrnce) c'est assez chaud, mais en Java tu as de la chance tu possède un opérateur 'not' (le ^ si mes souvenirs sont exacts).
    Si tu veux une phrase qui commence par "Je veux ", qui finisse par " pour ma regex" et au milieu qui n'ait pas "des caractères" l'expression régulière est "Je veux ".^"des caractères"." pour ma regex" (le . c'est la concaténation, ce n'est pas la synthaxe exacte pour du Java mais c'est une regex correcte.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  11. #11
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Salut,

    Citation Envoyé par Razgriz Voir le message
    Si tu veux une phrase qui commence par "Je veux ", qui finisse par " pour ma regex" et au milieu qui n'ait pas "des caractères" l'expression régulière est "Je veux ".^"des caractères"." pour ma regex" (le . c'est la concaténation, ce n'est pas la synthaxe exacte pour du Java mais c'est une regex correcte.
    Citation Envoyé par beekeep Voir le message
    j'ai déjà utilisé une regexp assez proche qui détecte les balises, je pensais pouvoir l'adapter :
    pour des caractères ça fonctionne, mais pour des chaines c'est autre chose.
    j'ai vu qu'il fallait créer un groupe (parenthèses) et ça marche pour le repérage des chaines de début et de fin :
    mais pas pour le reste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (début)[^(interdit)]*(fin)

  12. #12
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Citation Envoyé par Javadoc
    The string literal "\(hello\)" is illegal and leads to a compile-time error; in order to match the string (hello) the string literal "\\(hello\\)" must be used.
    T'as essayé ça? La doc sur la spécification de leurs expressions régulières se trouve dans la classe Pattern, une simple concaténation devrait suffire, si pas la solution est surement sur cette page.
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/06/2010, 15h23
  2. Réponses: 2
    Dernier message: 20/03/2007, 17h58
  3. expression régulière exclusion ' et espace
    Par pinocchio dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/02/2007, 10h05
  4. Réponses: 4
    Dernier message: 11/08/2006, 13h47
  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