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

Format d'échange (XML, JSON...) Java Discussion :

Problème pattern negative lookahead


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut Problème pattern negative lookahead
    Bonjour,

    Je vais essayer d’être clair, car depuis le temps que je me prends la tête sur ce problème, je ne suis plus sur de grand chose....

    Voila j'ai un programme java, tout ce qu'il y a de plus simple, pour valider un fichier XML à partir d'un XSD. Ce programme marche très bien pour ce que je lui demande, mais voila, j'ai voulu définir un nouveau type dans mon XSD pour être mon permissif dont voici la définition dans mon fichier XSD (je ne pense pas m’être trop trompé, c'est assez simple ....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <xsd:simpleType name="VFSType">
            <xsd:restriction base="xsd:normalizedString">
                <xsd:pattern value="(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+"/>
            </xsd:restriction>
      </xsd:simpleType>
    Le problème c'est que quand je veux valider mon XML une SaxException remonte en me disant Description

    InvalidRegex: Pattern value '(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+' is not a valid regular expression. The reported error was: 'Cette expression n'est pas autorisée compte tenu des options en cours.'.
    Puis je me suis aperçu que dans Eclipse, il faisait exactement référence au mémé problème, donc je suppose que ce n'est pas une erreur de code mais plutôt au niveau du XSD.

    J'ai regarde du coté du pattern, mais je me suis assuré sur un site (http://www.regexplanet.com/advanced/java/index.html) que le résultat était bien celui que je voulais, à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Regular Expression	(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+
    as a Java string	"(?!(AC4[0-9]{15}|AC[0-9]{16}|ROCK)).+"
    Replacement	
    groupCount()	1
    Test	Target String	matches()	replaceFirst()	replaceAll()	lookingAt()	find()	n [start(n),end(n)] group(n)
    1	CEAMOI	Yes			Yes	Yes	0: [0,6] CEAMOI
    1: [-1,-1] null
    2	O40000035617	Yes			Yes	Yes	0: [0,12] O40000035617
    1: [-1,-1] null
    3	AC0000200000000294	No	A	A	No	Yes	0: [1,18] C0000200000000294
    1: [0,18] AC0000200000000294
    4	AC4000200000000294	No	A	A	No	Yes	0: [1,18] C4000200000000294
    1: [0,18] AC4000200000000294
    5	ROCK	No	R	R	No	Yes	0: [1,4] OCK
    1: [0,4] ROCK
    Je ne vois que la partie xsd qui peut poser problème maintenant, mais j'avoue que mes connaissance sont assez limitées dans le domaine, j'ai cherché et cherché sur notre amis à tous, mais je n'ai rien trouvé parlant de xsd avec des patterns comprenant des negatives lookaheads, donc je suis venu chercher un peu d'aide ....siouplé :o)

    Pour info ce que je voudrais, c'est prendre tout sauf (AC4[0-9]{15}|AC[0-9]{16}|ROCK) qui est un regexp qui marche dans mon xsd.

    Voila je pense avoir tout dit, a vot' bon cœur :o)

    Merci

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Les expression régulières gérées par le schema XML ne sont pas celles gérées par java, perl ou C. Elles sont définies ici:


    XML Schema Part 2: Datatypes, appendice F

    En gros, la séquence ?!() n'existe pas dans cette définition. Tout ce que gère XSD c'est

    les quantifieurs,
    le ou
    le groupement
    les différentes classes de caractères

    Les trucs tordus comme les lookahead, greedy/non greedy c'est pas géré

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Merci pour ta réponse rapide tchize_.

    En effet j’étais déjà allé sur le site que tu m'indiques mais je pensais (ou espérais) qu'il y avait une autre solution.

    Donc si je comprend, il n'y a aucun moyen pour faire ça dans un WSDL/XSD ?

    Je vais donc essayer de m'en sortir autrement.

    Merci encore pour ta réponse.

    PS: Dois-je mettre RESOLU ?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la question que je me pose surtout, peut être à tord, pourquoi tu as besoin du negative lookahead là. J'ai du mal à voir ce que tu veux matcher

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Ah ok, c'est bien ce dont j'avais peur, je n'ai pas été très clair....

    En fait j'ai déjà un type qui match toutes les valeurs pour une balise qui correspond à cette regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (AC4[0-9]{15}|AC[0-9]{16}|ROCK)
    Ce que je voudrais faire ce serait de créer un nouveau type pour une autre balise qui prendrait toutes les valeurs possibles excepté celles de la regexp ci-dessus. C'est mieux ?

    en gros sur un cas simple ce serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    regexp 1 : [a-z]
    regexp 2 : [^a-z]

  6. #6
    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
    Citation Envoyé par zeukiller Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    regexp 1 : [a-z]
    regexp 2 : [^a-z]
    Dans les deux cas, la regexp n'accepte qu'un seul caractère. L'un n'est donc pas le contraire de l'autre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut
    Oui on est d'accord, l'un accepte un caractère compris entre "a" et "z" et l'autre un caractère autre que la plage de caractère précédente.

    Je pense que je vais partir sur un autre regexp pour résoudre mon problème, pas forcement aussi évidente que l'exemple ci dessus.

Discussions similaires

  1. [RegExp] negative lookahead
    Par kimjoa dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/06/2012, 21h25
  2. Problème Design Pattern : Help
    Par donkeyquote dans le forum C++
    Réponses: 5
    Dernier message: 14/01/2008, 09h54
  3. [Patterns]Séparation IHM <-> Noyau : Problême de progress bar ?
    Par Muetdhiver dans le forum Design Patterns
    Réponses: 8
    Dernier message: 18/09/2007, 22h28
  4. Problème d'accessibilité avec le design patterns MVC
    Par radical_bombtracks dans le forum JSF
    Réponses: 5
    Dernier message: 24/07/2007, 13h15
  5. Réponses: 5
    Dernier message: 10/05/2007, 16h03

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