Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2011, 16h09   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Par défaut Effacer tous les points sauf le dernier en fin de phrase

Bonjour, j'ai commencé à faire un preg_replace pour supprimer les points d'un domaine et de laisser seulement un point pour la terminaison d'une phrase. Sauf que ça deviens lours à gérer.

Je veux éliminer tous les points d'une phrase sauf le dernier dans une phrase.

Voici mon regex:
Code :
preg_replace('#\.(^\s)*(?=\w)|\s\.\s*(?=\w)|\s+\.(?!=\w)|(\.)\2|[:/]#i', '', $subject);
Ça donne ceci :

domaine.ltd (remplacé)
domaine .ltd (remplacé)
domaine . ltd (remplacé)
domaine. ltd (pas remplacé et c'est ce que je voulais)
domaine. . ltd (un pas remplacé et l'autre oui mais un problème ici)

J'explique le problème: celui-la, créé un "domaine.ltd" et le but du regex est de remplacer les points pour ne pas fiare de domaine.

Alors, je veux n'accepter qu'un seul point et à la toute fin de phrase sans aucun autre caractère par la suite sauf un espace ou non.

Donc, comment serait mon regex?

De l'aide serait apprécié.

PS, Résultat dans un outils de test :
http://lumadis.be/regex/test_regex.php?id=759
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 19h16   #2
Membre régulier
 
Inscription : juillet 2007
Messages : 62
Détails du profil
Informations personnelles :
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2007
Messages : 62
Points : 82
Points : 82
tu veux remplacer des points dans un domaine mais dans ton exemple il y a aussi des espaces. C'est peut être un bug ?

Essaie ça

Code :
echo preg_replace('#\.{1,}#', '', str_replace( ' ', '', $subject)) ;
kodeya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 22h07   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
A l'origine c'était pour éliminer les points qui ne terminent pas une phrase
de manière à éliminer les noms de domaine du genre www.domaine.com.
pour éviter la publicité dans un texte.

Votre solution semble être bonne mais il faudrait pouvoir laisser le dernier
point de la phrase. Donc, détecter s'Il y a autre chose après la phrase.
Et laisser les espaces qui sont utile dans une phrase.

Une chose, je ne savais pas que je pouvais ajouter des commandes php
dans un preg_remplace. Merci kodeya pour l'astuce.

Pour ce qui est des initiale tel que Mr. Mme. etc. Je ne sais pas. Mais
l'essentiel est de pouvoir éliminer les points pour ne pas constituer de
nom de domaine dans une phrase.

Citation:
Envoyé par kodeya Voir le message
tu veux remplacer des points dans un domaine mais dans ton exemple il y a aussi des espaces. C'est peut être un bug ?

Essaie ça

Code :
echo preg_replace('#\.{1,}#', '', str_replace( ' ', '', $subject)) ;
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 12h11   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Hello

Code :
1
2
3
 
$str = "je. suis. une. chaine. de. caractères.";
echo str_replace('.', '', $str) . '.';
Tout simplement.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 11/05/2011, 03h07   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 317
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 317
Points : 62
Points : 62
Merci Benjamin, vraiment simple en plus.

Citation:
Envoyé par Benjamin Delespierre Voir le message
Hello

Code :
1
2
3
 
$str = "je. suis. une. chaine. de. caractères.";
echo str_replace('.', '', $str) . '.';
Tout simplement.
dancom5 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h36.


 
 
 
 
Partenaires

Hébergement Web