Expression régulière

pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010 - 22 oct. 2009 à 16:08
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010 - 23 oct. 2009 à 12:01
Bonjour,

Ma question est simple, le résultat beaucoup moins ;)
Comment faire pour supprimer les caractères de ponctuation entre des balises ? Petit exemple :
ma question? je suis d'accord !
Je souhaite donc supprimer le : entre le < et le > pou obtenir :
ma question? je suis d'accord !
Je suppose que l'on peut faire ça avec preg_replace mais comment ???
Merci de votre aide.

6 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
22 oct. 2009 à 20:36
Salut,

La question est : quels sont les caractèrs que tu souhaites supprimer ? (je veux dire de manière précise et exhaustive, sachant que la réponse "les caratères de ponctuation" n'est pas assez précise à mon sens et encore moins exhaustive)
La question pourrait se reformuler, le cas échéant : quels sont les caractères que tu souhaites conserver ? (idem, de manière précise et concise, mais là, la réponse "les caractères alphanumériques" est satisfaisante)

Dans le premier cas, je ne peux pas (encore) te proposer de solution. Dans le second cas, en admettant que tu ne souhaites conserver que les lettres et les chiffres (y compris les caractères accentués) :
$str = preg_replace('`[^\w]`', '', $source);

Chaque fois qu'on a besoin d'une regex, il est primordial de déterminer très précisément ce que l'on souhaite. Dans ton cas, les caractères à conserver ou ceux à éliminer, et ce de manière la plus précise possible, puisque suivant les cas on utilisera plutôt tel ou tel masque, tel classe de caractères, tel ou tel option, etc.

Il est aussi extrêmement important de savoir sur quelle chaîne de caractères on travaille : est-ce que ce n'est que la balise, ou bien y a-t-il autre chose autour ? Si oui, quels caractères peut-on rencontrer et en quelle quantité ?
Dans ton cas, la balise est-elle située en début, milieu ou fin de chaîne ?

Bref, sans toutes ces précisions, impossible de te donner une vraie réponse qui tienne la route.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
22 oct. 2009 à 21:03
D'accord avec Neige. L'idée de prendre une expression régulière c'est tout à fait louable mais à condition de bien définir ce que tu appelles ponctuation et compagnie..
S.
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
23 oct. 2009 à 04:38
Pour ton cas particulier, ceci fera le travail, mais si ton utilisation dépasse simplement l'exemple que tu mentionnes ce n'est plus applicable, mais le principe restera le même.

echo preg_replace('/\<([^:]*)[:]*([^:]*)\>/','<$1$2>', '');
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
23 oct. 2009 à 04:45
Si l'idée est juste de supprimer le caractère : , alors on peut faire plus simple :

echo preg_replace('`:`','', '');


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010
23 oct. 2009 à 11:58
Arto, j'ai essayé ton expression, elle ne marche pas :(
Neige, c'est plus compliqué que ça, il faut préciser que ceux sont les : entre les < et > que je veux supprimer :p
Je pense que Arto se rapproche mais le texte afficher est vide :(
0
pcmanprogrammeur Messages postés 126 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 16 octobre 2010
23 oct. 2009 à 12:01
oups !! ça marche Arto, en fait, fallait que je mette :
echo "<xmp>".preg_replace('/\<([^:]*)[:]*([^:]*)\>/','<$1$2>', '')."</xmp>";
pour voir le résultat à l'écran :)
Gros merci ;)
0
Rejoignez-nous