logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Scripting, langages interprétés >> Expressions régulières Newtopic | Reply
poster txt
lombredudragon
Inscrit le 11-01-2004
Posté le 28-04-2010 14:08

Salut tlm, je galère sur les expressions régulières. Je suis en php et j'aimerais pouvoir couper les mots long de plus de x caractère en les séparant par un espace.

La regexp suivante marche bien :

Code:

$text = preg_replace('/([^ ]{30})/si','\\1 ',$text);



Maintenant j'aimerais la modifier pour qu'elle ne coupe pas les mots débutant par http|https|ftp et [

Code:

if(!preg_match('`^(http|ftp|https)://|www\.|\[`',$text))
{
echo 'okay pas de lien dans le texte';
}



mais je n'arrive pas à coupler la regexp du preg_match avec celle du preg_replace.

Des idées ?
_________________________

profil | edit | quote
Shiva
Inscrit le 14-07-2002
Avatar
Posté le 28-04-2010 22:01

Une idée serait de récupérer les liens et des les traiter à part comme ca après tu coupes tout en part de 30. Enfin je sais pas si tu peux.
_________________________
On paye pour voir, pour entendre, quand est ce que l’on va devoir payer pour respirer ?
profil | edit | quote
lombredudragon
Inscrit le 11-01-2004
Posté le 29-04-2010 14:26

Pas con comme idée
Je vais essayer ça en attendant de trouver la soluce propre avec un seul preg_replace.
_________________________

profil | edit | quote
lombredudragon
Inscrit le 11-01-2004
Posté le 29-04-2010 16:45

J'ai un peu galéré mais j'ai trouvé la soluce :

Quote:


function replace_all($matches)
{
//$matches[1], texte contenu entre les balises
return preg_replace('/([^ ]{30})/si','\\1 ',$matches[0]);
}

$texte = 'un beau text de test, <a href="http://www.goooooooooooooooooooooooooooooooooooogle.fr">auuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuussi</a> et auuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuussi ça, <img src="http://www.ni.fr" />.';
$pattern = "'>([^<]*)'si"; // recherche les textes en dehors des balises
$text = preg_replace_callback($pattern, "replace_all", $texte); // appelle la fonction de retour qui va couper les mots long de plus de x caractères

print($text);





EDIT : J'avais oublié de préciser que j'avais une autre routine qui transformer mes adresses en balises html, du coup la soluce devient plus simple. Merci pour l'idée en tout cas ::smiley_pouce_remerciements::



_________________________


[ Ce Message a été édité par: lombredudragon le 2010-04-29 17:01 ]
profil | edit | quote
Shiva
Inscrit le 14-07-2002
Avatar
Posté le 30-04-2010 10:20

pas de soucis, le coup du preg_replace_callback est encore mieux.
_________________________
On paye pour voir, pour entendre, quand est ce que l’on va devoir payer pour respirer ?
profil | edit | quote
Newtopic | Reply

Online : aqiiyiefae, arofiribisho, aruyejehb, iwuqiyevev, nenodeoqawa, oqoteahevufaq, RichardOa, xizocute et 53 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page