j'ai crois avoir compris ton problème, j'avais essayé de le faire avec des "lookaround" mais je n'ai pas réussi, donc je te propose ça qui n'est pas peut-être très optimal niveau performance mais qui a l'air de marcher
- on remplace tous les tags <a...>...</a> (on les garde dans un tableau) et leur contenu par <a0/>, <a1/>, <a2/>,... pour les identifier postérieurement, de cette manière pas de risque de remplacer ce qu'il y a à l'intérieur des tags <a>
1 2 3 4 5 6 7 8
| $liens = 'mon contenu';
preg_match_all('`(?<links><a\s+[^>]*>.*?</a>)`si',$liens,$match);
$links = $match['links'];
$i = 0;
while(preg_match('`<a\s+`si',$liens)){
$liens = preg_replace('`<a\s+[^>]*>.*?</a>`si',"<a$i/>",$liens,1);
$i++;
} |
-on remplace tes mots par ce que tu veux (j'ai mis comme exemple remplacer un mot "toto" par "####toto####"
$liens = preg_replace('`(\b(mot1|mot2|mot3)\b)`si','####$1####',$liens);
-on remet les tags <a..>..</a> qu'on a précédemment stockés dans un tableau par les <a0/>, <a1/>, <a2/>,...
1 2 3 4 5
| $i = 0;
while(preg_match('`<a\d+/>`si',$liens)){
$liens = preg_replace('`<a\d+/>`si',$links[$i],$liens,1);
$i++;
} |
Partager