Bonjour,

J'essaie de mettre au point une fonction me permettant de remplacer certain "mot" pour y insérer une infobulle quand on survole le "mot"

Tout cela n'est pas très clair... alors voici un exemple:
Mon texte est du type:
E7 E7/D Bsus

E7 A D Dmaj7 Bsus b(no 3rd)
Boy Mercury shootin' through ev'ry degree
E7 A D Dmaj7 Bsus b(no 3rd)
Oh-ho girl dancin' down those dirty and dusty trail-ai-ails
Je veux donc remplacer tous les accords (dans l'ordre E7,E7,D,Bsus,E7,A...) par une infobulle, bref pour cela pas de problème.

Voici un bout de ma fonction qui fait cela:
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
	// Je récupère tous les accords correspondant 
	$req = mysql_query("SELECT * FROM `accords` INNER JOIN `tab-accord` ON `accords`.id=`tab-accord`.`accord-id` WHERE `tab-accord`.`tab-id` = '$tab_id'"); 
 
	// Boucle qui va faire les changements pour chaques accords
	while($accord = mysql_fetch_assoc($req))
	{
 
	$tabla = make_tabla($accord[doigt],$accord[accord],$accord[fret]); // Genère le diagramme
 
	#$pattern = ";([^aA-zZ1-9<()] *)$accord[accord]( */?,?[^\\-|aA-zZ0-9<>#]);";
	$pattern = ";( +|[^aA-zZ1-9<>] {0}| ?/ ?|[^aA-zZ1-9()] {1})$accord[accord]($| ?/| ?,|[^aA-zZ1-9()#<>|]| +|\([mM]\))([^\w]);s";
 
 
	$textTab = preg_replace("$pattern", "$1<a class=infob href=\"#\"><span><pre>$tabla</pre></span>$accord[accord]</a>$2$3", $textTab);
 
	}
Ceci marche ... mais ma regex rencontre quelques soucis parfois car il y a beaucoup d'exception.
En effet l'accord à remplacer peut ce trouver:
- avec 0 caractère devant
- avec plusieurs espace devant
- avec un '/' devant
- avec 0 ou plusieurs espace après
- sans texte avant ou apres (pour ne pas remplacer les paroles)
- ...

Bref je suis un peu perdu... voyez vous un moyen de faire un preg_replace plus propre ? Ou une meilleur solution ?

Merci d'avance pour votre aide.