Expression régulière

cs_ismailfk Messages postés 37 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 8 juillet 2009 - 7 juil. 2008 à 23:03
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 8 juil. 2008 à 11:36
Bonjour,
je voudrais bien de remplacer cette chaine caractère "<![CDATA[]]>
" par chaine vide ""
voici l'expression du pattern
Pattern p2= Pattern.compile("<![CDATA[]]>
" ); mais ça marche pas en effet il n'ya de remplacement de la chaine. je pense le problème
dû au caractère '!' Est ce que vous avez une solution.
merci.

2 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
8 juil. 2008 à 09:32
Bonjour
A mon avis c'est plutot les [] qui pose problème puisqu'il sont utilisé pour autorisé une liste de caractère.
Utilise
\p{\x21}pour le !
\p{\x5b}pour le [
\p{\x2d} pour le ]

Ps : dans ton cas, un simple replace (de la classe string) ne suffirait pas ?
Cdt
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
8 juil. 2008 à 11:36
les [] sont des caractères spéciaux dans les expressions régulières qui permettent de définir des classes de caractères :

[a-z] : tout caractère compris entre 'a' et 'z'
[a-zA-Z] : tout caractère compris entre 'a' et 'z' ou 'A' et 'Z'

Pour les utiliser comme caractère d'un motif, il faut utiliser le mécanisme d'échappement (éviter leur interprétation)

- \\[ pour le caractère '['
- \\] pour le caractère ']'

pareil pour les parenthèses, qui permettent de définir des groupes de capture

- \\( pour le caractère '('

- \\) pour le caractère ')'

L'utilisation des codes Unicode ou ASCII, peut marcher, mais risque de dépendre de la table de correspondance des caractères utilisée par la JVM.

Pour le point d'exclamation, je ne sais pas trop, mais tu peux aussi l'échapper, au cas où... (\\!), il est utilisé par les expressions de groupes sans captures :

<tt>(?!</tt>X<tt>)</tt>, X, via zero-width negative lookahead, ----
<tt>(?<!</tt>X<tt>)</tt>, X, via zero-width negative lookbehind

Voir la classe Pattern : http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html, notamment le paragraphe "Backslashes, escapes, and quoting"

Sinon, il existe un parser tout fait qui gère la lecture des groupes CDATA, pour éviter des travailler par expressions régulières : SAX en implémentant l'interface LexicalHandler (startCDATA() et endCDATA().
0
Rejoignez-nous