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 23/02/2007, 16h14   #1
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
Par défaut problème d'array / regex

Voila , j'aimerais que les smiley dans mes articles s'affiche et j'ai une erreur lamentable qui m'est arrivé en pleine face.

Aprés quelques modif acharnée je m'en remet à vous

Voici mon code, pour l'instant qu'un smiley pour tester :
Code :
1
2
3
4
5
6
 
$smilies = array('^_^');
$smilies_url = array('yep.gif');
foreach($smilies as $smilie){
	$text = preg_replace('(\s|\r|^|&gt;)'+$smilie[i]+'(\s|\r|^|&gt;)', '$1<img src="image/smiley/'+$smilies_url[i]+'" alt="Smiley" class="smilies" />$2',$text);
}
et l'erreur :

Citation:
preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash
je pense foirer dans la regex a cause d'une erreur de manip du foreach...

Merci d'avance pour l'aide apporté.
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h16   #2
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
La concaténation en php, c'est le . pas le +

Ou sont les délimiteurs du motif de recherche ?
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h17   #3
Membre habitué
 
Avatar de Sarrus
 
Inscription : mai 2005
Messages : 180
Détails du profil
Informations personnelles :
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : mai 2005
Messages : 180
Points : 102
Points : 102
l'erreur du preg_replace, litteralement : le délimiteur (séparateur) ne peut pas etre alphanumerique ou backslash
Sarrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h19   #4
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Code :
1
2
3
 
preg_replace("#(\s|\r|^|&gt;)$smilie[i](\s|\r|^|&gt;)#", '$1<img src="image/smiley/'.$smilies_url[i].'" alt="Smiley" class="smilies" />$2',$text);
}
C'est pas sûr que ça marche (je fais vite) mais y aura du mieux
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h27   #5
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
rah le boulet, ça m'apprendra a vouloir passer a la va vite de mon code javascript a un code php >_<

j'ai testé ça :

Code :
1
2
3
4
5
$smilies = array('^_^');
		$smilies_url = array('yep.gif');
		foreach($smilies as $smilie){
			preg_replace("#(\s|\r|^|&gt;)".$smilie[i]."(\s|\r|^|&gt;)#", '$1<img src="image/smiley/'.$smilies_url[i].'" alt="Smiley" class="smilies" />$2',$text);		
		}
pas d'erreur mais sa remplace pas ^_^ dans ma chaine par l'image :/
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 16h36   #6
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
smilie n'est pas un tableau, pourquoi mettre $smilie[i] ?
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 17h12   #7
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
erreur de ma part

j'ai enlever le [i] mais sa marche toujours pas
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 17h16   #8
Membre régulier
 
Avatar de camyo
 
Inscription : juin 2004
Messages : 213
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2004
Messages : 213
Points : 70
Points : 70
je vais peut etre dire une co**erie mais

elle est defini ou la valeur de $smilie??
camyo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2007, 17h22   #9
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Normal, c'est malin aussi de prendre des métacaractères... !!!

Essaies ça :

Code :
$smilies = array('\^_\^');
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 01h01   #10
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
j'avais essayé et sa marchais pas
IP-Fix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 16h36   #11
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
suggestion

Code :
1
2
3
4
5
6
 
$smilies[]=array('text'=>'^_^','url'=>'yep.gif');
$smilies[]=array('text'=>':)','url'=>'smile.gif');
foreach($smilies as $smilie) {
  $text=preg_replace('#(^|\W)'.preg_quote($smilie['text']).'(\W|$)#s','$1<img src="image/smiley/'.$smilie['url'].'" alt="Smiley" class="smilies" />$2',$text);
}
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 17h35   #12
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Salut Daniel, on se retrouve sur des regexp


Alors pour les tableaux, que je voulais déjà utiliser la dernière fois, il y a une fonction intégrée que je trouve très smart. Extrait de php.net :

Citation:
replacement

La chaîne ou un tableau de chaînes pour le remplacement. Si ce paramètre est une chaîne et le paramètre pattern est un tableau, tous les masques seront remplacés par cette chaîne. Si les paramètres pattern et replacement sont des tableaux, chaque pattern sera remplacé son replacement associé. Si replacement à moins d'éléments que pattern, alors une chaîne vide est utilisée pour le reste des valeurs.
Citation:
Exemple 1815. Utilisation de tableaux indexé avec preg_replace()
Code :
1
2
3
4
5
6
7
8
9
10
<?php
$string = 'Le renard marron agile saute par dessus le chien paresseux.';
$patterns[0] = '/agile/';
$patterns[1] = '/marron/';
$patterns[2] = '/renard/';
$replacements[2] = 'grizzly';
$replacements[1] = 'brun';
$replacements[0] = 'lent';
echo preg_replace($patterns, $replacements, $string);
?>
L'exemple ci-dessus va afficher :

Le grizzly brun lent saute par dessus le chien paresseux.
Ca devrait être pas mal utile pour les smilies...
Pour plus de détails, php.net en parle vachement mieux que moi.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 23h52   #13
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120


Citation:
Envoyé par jml94
Ca devrait être pas mal utile pour les smilies...
tout à fait, mais ce n'est pas non plus une garantie de lisibilité.
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 00h20   #14
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Exact !

C'est pour cela que personnellement, je passerais tout ce traitement à une classe métier, avec une méthode du genre $Smilie('^_^') qui retourne le smilie qui va bien.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 03h50   #15
Membre éprouvé
 
Avatar de IP-Fix
 
Inscription : mars 2006
Messages : 406
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 406
Points : 433
Points : 433
Envoyer un message via MSN à IP-Fix
j'ai choisi la methode de daniel61 et ça marche pas mal mais c'est moins jolie que mes deux tableaux qui marche pas ^^

merci à tout les deux en tout cas !
IP-Fix 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 18h22.


 
 
 
 
Partenaires

Hébergement Web