Expression régulière

Signaler
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010
-
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010
-
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

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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à ;)
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
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.
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
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>', '');
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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à ;)
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010

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 :(
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010

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 ;)