Suppression d'une chaine de caractères avec ereg_replace

Zen
Invité n'ayant pas de compte PHPfrance

21 mars 2008, 01:29

Pour supprimer une partie d'une chaine de caractères $chaine, j'ai pensé à utiliser la fonction ereg_replace de la manière suivante:

Je définis les sous chaines de début et de fin qui délimitent la zone que je veux supprimer:

$chainedebut= "<tr>\n<td class=\"aligntop bold\>Dur"
$chainefin= "PDF</p>"

et je fais:
$chaine = eregi_replace($chainedebut.$chainefin, "", $chaine);

mais visiblement, la sous chaine complète n'est pas trouvée.
Je crois qu'il manque quelque chose dans mon expression régulière pour préciser qu'il peut y avoir n'importe quels caractères entre $chainedebut et $chainefin, mais je ne connais pas la syntaxe ("." est censé signifier n'importe quel caractère, mais c'est aussi l'opérande de concaténation des chaines!)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 mars 2008, 09:39

Le point désigne effectivement n'importe quel caractère d'une expression régulière à condition d'être utilisé dans un masque, c'est à dire en tant que chaine de caractère :) Lorsque tu fais $chainedebut.$chainefin, tu te contente de demander à php de concaténer les deux valeurs.

Si tu procède ainsi : $chainedebut.'.'.$chainefin, php concatainera les 3 valeurs pour obtenir le masque suivant : "<tr>\n<td class=\"aligntop bold\>Dur.PDF</p>" (auquel il te manque une guillemet pour fermer l'attribut class).
Le point sera alors considéré comme l'occurence de n'importe quel caractère (mais une seule occurence, si tu en veux plus il faut le préciser avec un +, un *, un {x,y} ...)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...