Bonjour, j'ai un petit problème avec mon expression régulière :

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
17
18
19
20
21
22
23
24
25
26
27
int idx = 1;
String result = "";
 
String LinkRE = "(<[Aa][^>]*onclick=\"bookmark_onclick[^>]*>)";
 
Pattern p = Pattern.compile(LinkRE);
 
content = "<a onclick=\"bookmark_onclick='orga_du_plan_de_devt'; \" "
+ "href=\"javascript:void();\" target=\"_blank\">et mis en place &nbsp</a>&nbsp;"
+ "<a onclick=\"bookmark_onclick='orga_du_plan_de_devt'; \" "
+ "href=\"javascript:void();\" target=\"_blank\">et mis en place &nbsp</a>";
 
Matcher m = p.matcher(content);
boolean b = m.matches();
 
if (b) {
	for (int i = 0; i < m.groupCount(); i++) {
	String str = m.group(i);
	str.replaceAll("<a", "<a class=\"pagelink\"");
	str.replaceAll("href=\"javascript:void();\"", "");
	result = result + content.substring(idx, m.start() - idx) + str;
	idx = m.start() + m.end();
	}
		result = result + content.substring(idx);
}
 
return content;
Mon but est de repérer tous les <a onclick="bookmark_onclick... > pour pouvoir les modifier. Seulement mon expression régulière ne fonctionne uniquement si je ne pose qu'un seul <a ...> sans le fermer. En gros si j'ai :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
content ="<a onclick=\"bookmark_onclick='orga_du_plan_de_devt'; \" "
+ "href=\"javascript:void();\" target=\"_blank\">et mis en place &nbsp</a>&nbsp;"
+ "<a onclick=\"bookmark_onclick='orga_du_plan_de_devt'; \" "
+ "href=\"javascript:void();\" target=\"_blank\">et mis en place &nbsp</a>";
En Delphi, l'expression qui fonctionne est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
LinkRE = '(?g)(<[Aa][^>]*onclick="bookmark_onclick[^>]*>)';
Un coup d'oeil dans la librairie de Delphi permet de voir que (?g) siginifie : Modifier non standard. En le mettant à Off vous spécifier de mettre tous les opérateurs en mode non-vorace (par défaut, ce modifier est à On). Aussi, si le modifier /g est à Off, alors '+' fonctionne comme '+?', '*' comme '*?' et ainsi de suite...