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 : Agustinbluts, AgustinPhine, Agustinwhase, Bbbarrige, BbbUnsels, best canadian pharcharmy online, canadian pharmacy online for viagra, Cevbraics, Cevvifura, Donaldjem, DonaldJinna, ebuyuhiphapu, edeuohuv, elewafuz, eolabizuliwax, eunagidez, euwbiku, generic cialis canadian, inacotob, Jorgeviomb, Juanitamache, Juanitarhync, KevinAeron, KevinExicy, Ksbvgainty, Lmldneefe, Lnbikayany, Lnbiunsemi, MarcusAgock, MartinMoigh, ohobaso, ojeyovegoxuet, purchasing viagra from canada, Ralphcak, RalphSiree, Romeotab, SonjaBrisk, SonjaNuS, SonjaOrigh, ubeirufqufow, ukelahubedug, uromueboe, utenesecig, uyiumof, uzazitehousoo, Vtbunelay, Vvbfrunse, Vvbprinia, yatsonizayad et 109 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