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/06/2006, 10h54   #1
Membre habitué
 
Avatar de nico le terrible
 
Inscription : novembre 2004
Messages : 163
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 163
Points : 107
Points : 107
Par défaut Les expressions rationnelles !

Bonjours à tous !

Alors voilà j'aimerai récupérer dans un texte une partie entouré de [dia] et de [/dia] et ensuite travailler sur ce qu'il y a au milieu puis afficher le texte total !

Ce qu'il y a entre dia et /dia ne peut pas du tout être travaillé en une seule regex alors je ne voie ps :'(

J'ai déjà essayé avec split mais comment savoir laquelle des parties est celle entouré de dia :'(

Merci à tous ceux qui me répondront !
nico le terrible est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 10h58   #2
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
avec 2 expressions....
une qui recupere et l'autre te permet de travailler dessus.
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h00   #3
Membre habitué
 
Avatar de nico le terrible
 
Inscription : novembre 2004
Messages : 163
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 163
Points : 107
Points : 107
Non

Je voie pas comment récupérer...

De plus le deuxième bout a besoin de beaucoup plus qu'une expression régulière
nico le terrible est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h07   #4
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
preg_match("#[dia](.*?)[dia]#mi", $ton_texte, $match);
tu peux utiliser un preg_match_all si tu en as plusieurs.
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h16   #5
Membre habitué
 
Avatar de nico le terrible
 
Inscription : novembre 2004
Messages : 163
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 163
Points : 107
Points : 107
Le problème et que à la fin je veut tout afficher dans l'order par exemple on a :
Code :
ejrvotpdb[dia]j/r/cba1[/dia]tfyudu
Je veut tout afficher mais avec ce qu'il y a entre [dia] et [/dia] modifié et j'ai regardé la doc preg_match ne relève que ce qui correspond à la chaîne recherché...

Enfin c'est pas trop grave j'ai trouvé un moyen un peu dégeux :s :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$texte="ejrvotpdb[dia]j/r/cba1[/dia]tfyudu";
 
$tab=split("\[dia",$texte);
foreach($tab as $elem)
{
	$tab2=split("\[/dia\]",$elem);
 
	foreach($tab2 as $elem2)
	{
		if ($elem2[0]==']')
		{
			...
		}
		echo elem2;
	}
}
Voilà comme je laisse un ] je regarde les chaines qui le possèdent et je les trasforme
nico le terrible est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h45   #6
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
http://fr.php.net/manual/fr/function.preg-replace.php est ton ami

Code :
1
2
3
4
5
6
<?php
$string = 'TON TEXTE';
$pattern = '#[dia](.*)[/dia]#i';
$replacement = 'DIA$1DIA';
echo preg_replace($pattern, $replacement, $string);
?>
ca devrait faire l'affaire, tu change le $string, et DIA DIA dans replacement, dans $1 se trouve ce qui a été pris entre tes crochets DIA.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h52   #7
Membre habitué
 
Avatar de nico le terrible
 
Inscription : novembre 2004
Messages : 163
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 163
Points : 107
Points : 107
Oui mais avec ça je ne peut pas travailler la partie qui se trouve entre DIA et DIA...
nico le terrible est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 11h58   #8
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Expert PHP
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2004
Messages : 2 126
Points : 2 602
Points : 2 602
Citation:
Envoyé par nico le terrible
Oui mais avec ça je ne peut pas travailler la partie qui se trouve entre DIA et DIA...
bah si, allez dit exactement ce que tu veux faire, je te dirai si c'est possible.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 12h48   #9
Membre habitué
 
Avatar de nico le terrible
 
Inscription : novembre 2004
Messages : 163
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 163
Points : 107
Points : 107
Je m'en suis sortie c'était pour faire des diagrammes d'échecs sur un forum !
D'ailleurs je poste le code pour ceux que ça peut interressé

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$texte='';
	$tab=split("\[dia",$message);
foreach($tab as $elem)
{
	$tab2=split("\[/dia\]",$elem);
 
	foreach($tab2 as $elem2)
	{
		if ($elem2[0]==']')
		{
			$texte.="<table>";
			$tab3=split("/",$elem2);
			$i=0;
			foreach($tab3 as $elem3)
			{
				$i++;
				if ($i==1)$couleur[0]=$elem3[1].$elem3[2];
				if ($i==2)$couleur[1]=$elem3[0].$elem3[1];
				if ($i>2)
				{
					$tab4[$elem3[2]][9-$elem3[3]]=$elem3[0].$elem3[1];
				}
			}
			$c=0;
			for ($j=1;$j<=8;$j++)
			{
				$c=!$c;
				$texte.="<tr>";
				for ($i='a';$i<='h';$i++)
				{
					$c=!$c;
					$texte.="<td><img src='piece/".$couleur[$c].$tab4[$i][$j].".png'></td>";
				}
				$texte.="</tr>";
			}
			$texte.="</table>";
		}
		else
		{
			$texte.=$elem2;
		}
	}
}
$message=$texte;
Et maintenant l'explication pour générer des diagrammes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Voilà maintenant on peut afficher des diagrammes et c'est facile !
 
Tout d'abord il faut mettre : [dia] et [/dia]
 
Ensuite entre les deux il faut mettre tout d'abord la couleur des cases blanches puis un / puis la couleur des cases noires puis un /.
 
Comme couleur il y a :
-ro : rouge
-vf : vert foncé
-rs : rose
-bc : bleu clair
-be : beige
-ma : marron
-bf : bleu foncé
-jf : jaune foncé
-jc : jaune clair
-vc : vert clair
 
Voilà ensuite à la suite des couleurs il faut mettre les différentes pièces !
 
Tout d'abord la première lettre de la pièce (r : roi, d : dame, c : cavalier, f : fou, t : tour, p : pion), ensuite sa couleur : n pour noir et b pour blanc !
 
Enfin sa position a1, b1, c1 !
 
Exemple un cavalier blanc en a1 : cba1
 
Pour mettre plusieurs pièces séparé les par des /
 
Exemple : cba1/cna2 donne un Cavalier Blanc en a1 et un Cavalier noir en a2 !
Et les exemples ici : http://ascbechecs.free.fr/forum/lire.php?msg=3586
nico le terrible 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 04h33.


 
 
 
 
Partenaires

Hébergement Web