Suprimer des balises html <> avec des regex

Suprimer des balises html <> avec des regex - PHP - Programmation

Marsh Posté le 07-05-2006 à 13:42:19    

voila, j'aimerais pouvoir supprimer un ensemble de caractère :
la chaine de caractère table-,  
suivi d'un nombre
suivi de -
 
cette sous chaine à supprimer est au dbut de la chaine.
 
exemple :  
table-106-client  ====> 106-client
 
 
j'ai essayé ca  
 

Code :
  1. $t = eregi_replace( "^((table-)[:digit:](-))","", "table-106-client" );
  2. echo $t;


mais j'ai une belle erreur ...
 
je m'explique comment je raisonne ....
je recherche un ensembre de caractère (table-) puis de chiffres [:digit:] puis le caractère (-)
ces 3 sous ensemble forment un ensemble ((table-)[:digit:](-))
et celui ci doit etre au début de chaine
^((table-)[:digit:](-))


Message édité par weed le 14-05-2006 à 11:44:00
Reply

Marsh Posté le 07-05-2006 à 13:42:19   

Reply

Marsh Posté le 07-05-2006 à 17:14:45    

substr ...
 
edit : si tu fais ca dans le but de t'entrainer aux regex alors :
preg_replace('#^table-([0-9]+-.*)$#i', '$1', 'table-106-client')


Message édité par afbilou le 07-05-2006 à 17:19:27
Reply

Marsh Posté le 14-05-2006 à 03:35:14    

oui c'est surtout pour m'entrainer.
nop substr ne suffit pas ....
comme tu l'as bien spécifier [0-9]+ => au moins 1 caractère de 0 à 9. Ca peut etre un nombre de 1 chiffre à n.  
C'est pas possible avec un substr, parce que l'on donne la position de départ et la longeur. C'est figé. A la rigueur un explode ("-","table-106-client'" ) peut etre pas mal.
 
Question :
pourquoi as tu mis des # ?

Reply

Marsh Posté le 14-05-2006 à 11:41:21    

Bon, j'ai d'autre questions. Je souhaiterais supprimer toutes mes balises html d'une chaine de caractères php ....
 
Pour mes tests, je remplace les < > par ( ) pour voire si cela a bien été retiré.
 
$test = "(span classe='tetetet') kjsdhfjksdfh (/span)";
 


$test2 = preg_replace ('(\((/)?.*\))', '', $test);
echo "test = $test, <br>test2 = $test2<br>";
affiche :
test = (span classe='tetetet') kjsdhfjksdfh (/span),
test2 =


tout a été effacé. C'est un normal car j'ai spécifié dans le motif, n'importe quel caractères, .*,  apres une premiere (, il a donc pris en compte aussi la prenthèse fermante ). Le motif ne s'est pas arrété a la première ).
 
J'ai donc été plus restrictif : uniquement des alphanumériques entre les parenthèses :
 
 

$test2 = preg_replace ('(\((/)?[[:alnum:]]*\))', '', $test);
echo "test = $test, <br>test2 = $test2<br>";
affiche :
test = (span classe='tetetet') kjsdhfjksdfh (/span),
test2 = (span classe='tetetet') kjsdhfjksdfh


ma première balise n'a pas été pris en compte à cause des ' par contre la 2ème (/span) a bien été prise en compte.
Comment faire ?
 
j'ai essayé avec ([\'\"=][[:alnum:]])* mais cela ne fonctionne pas.

$test2 = preg_replace ('(\((/)?([\'\"=[[:alnum:]]])*\))', '', $test);


Message édité par weed le 14-05-2006 à 12:15:53
Reply

Marsh Posté le 14-05-2006 à 21:58:45    

un petit up.
Je suis sur que pour certain d'entre vous, cela ne doit pas etre bien compliqué.

Reply

Marsh Posté le 14-05-2006 à 22:25:45    

[[:alnum:]] ne contient pas le caractère d'espacement.
 
#\([^\)]*\)# devrait faire ce que tu veux (pose des questions si tu ne comprends pas).
 
(Et pour répondre à ta question plus haut, le # est un caractère qu'il faut mettre en début et en fin de masque, mais qui peut être n'importe quel autre caractère. Ceci dit en encadrant de parenthèses comme tu as fait il me semble que c'est bon aussi.)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 15-05-2006 à 01:44:22    

arf zut. Merci bcp.
Je vais tester ca demain.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed