IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Les expressions rationnelles ! [RegEx]


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    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 !

  2. #2
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    avec 2 expressions....
    une qui recupere et l'autre te permet de travailler dessus.

  3. #3
    Invité
    Invité(e)
    Par défaut
    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

  4. #4
    Membre émérite Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Par défaut
    preg_match("#[dia](.*?)[dia]#mi", $ton_texte, $match);
    tu peux utiliser un preg_match_all si tu en as plusieurs.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le problème et que à la fin je veut tout afficher dans l'order par exemple on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    http://fr.php.net/manual/fr/function.preg-replace.php est ton ami

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Oui mais avec ça je ne peut pas travailler la partie qui se trouve entre DIA et DIA...

  8. #8
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 127
    Par défaut
    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.

  9. #9
    Invité
    Invité(e)
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enfin maîtriser les Expressions Rationnelles
    Par Community Management dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 15/11/2020, 17h00
  2. Les expressions régulières / rationnelles, un tuto généraliste?
    Par kayzra dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 14/12/2007, 23h05
  3. Réponses: 19
    Dernier message: 03/10/2007, 10h14
  4. Bug dans les expressions régulières ?
    Par SergioF dans le forum Linux
    Réponses: 8
    Dernier message: 12/05/2004, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo