Bonjour à tous, je me casse les dents sur une expression régulière dans laquelle je souhaite inclure une exclusion sur une back reference.
Manifestement, ma RegEx ne fonctionne pas (j'utilise '!' avec de sérieux doutes, en fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 final String regex = "<([^>]+)>([^<]+)<\\s*(!(/\\1)|!(\\1))\\s*>"; // <(1)>(2)<(3(4)(5))> Pattern pattern = Pattern.compile(regex); Matcher matcher; String replace = "<$1><span>$2</span><$3>"; matcher = pattern.matcher("<p>toto</p>"); // pas de remplacement assert !matcher.find(); matcher = pattern.matcher("<p>toto<br/></p>"); // <p><span>toto</span><br/></p> assert matcher.find(); matcher = pattern.matcher("<p>toto<br></p>"); // <p><span>toto</span><br></p> assert matcher.find(); matcher = pattern.matcher("<p>toto <span>titi</span></p>"); // <p><span>toto </span><span>titi</span></p> assert matcher.find();mais '^' ne donne rien non plus) ; j'ai ajouté en commentaire le résultat attendu d'un #replaceAll éventuel, pour bien expliquer ce que j'essaye d'obtenir.
QUESTIONS :
Ai-je raison d'utiliser des back references avec java.util ?
Mon décompte des groupes est-il valable ?
Peut-on indiquer que l'on cherche "une section" qui n'est ni un premier groupe rencontré, ni ce même groupe avec un '/' devant ?
Merci d'avance pour toutes vos remarques, critiques et suggestions.
Partager