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:
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
Citation:
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:
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