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 16/02/2007, 13h37   #1
Membre habitué
 
Étudiant
Inscription : janvier 2006
Messages : 501
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2006
Messages : 501
Points : 113
Points : 113
Par défaut récupérer une partie d'un texte en précisant les bornes

Bonjour,

J'aimerais savoir comment faire pour récuperer dans une variable ce qui se trouve entre deux chaines de caracteres que l'on définit ?

PAr exemple, dans un textte j'ai :
[Titre1]bla bla bla[/Titre1]
...
[Titre1]lalalalala[/Titre1]
...
[Titre1]essai[/Titre1]

et j'aimerais récupéré bla bla bla, lalala et essai dans des variables (1 tableau je pense c'est mieux)

est-ce possible ?

Merci
++
italiasky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 13h41   #2
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Fait une recheche dans les forums de ce site pour "bbcode". Tu trouveras sans problème
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 13h45   #3
Membre habitué
 
Étudiant
Inscription : janvier 2006
Messages : 501
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2006
Messages : 501
Points : 113
Points : 113
oui mais avec le bbcode, c'est juste pour remplacer ce qu'il y a autour d'un certain texte, là j'aimerais récupéré ce qu'il y a entre ces textes dans des variables, dans un tableau en fait.

Avec mon ex d'au dessus :
[Titre1]bla bla bla[/Titre1]
...
[Titre1]lalalalala[/Titre1]
...
[Titre1]essai[/Titre1]


je récupere dans un tableau $arr : 0 => bla bla bla, 1 => lalalala, 2 => essai

Vous voyez ce que je veux dire ?
italiasky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 13h59   #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
http://fr.php.net/manual/fr/function.preg-match.php
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 14h01   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Rien de plus simple avec la fonction preg_match_all :
Code X :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$string = <<< STRING
Avec mon ex d'au dessus :
[Titre1]bla bla bla[/Titre1]
...
[Titre1]lalalalala[/Titre1]
...
[Titre1]essai[/Titre1]
STRING;

$nb = preg_match_all('£\[Titre1\](.+)\[/Titre1\]£U', $string, $matches);
for ($i = 0; $i < $nb; $i++) {
    echo $matches[1][$i] . '<br/>';
}
?>
Si besoin n'hésitez pas à consulter le tutoriel d' Initiation aux expressions régulières en PHP.


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2007, 14h01   #6
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
L'aide sur les bbcode va pouvoir te donner une idée des patterns à utiliser car les regex vont intervenir

Un exemple à l'arrache :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
$s = '[Titre1]bla bla bla[/Titre1]
...
[Titre1]lalalalala[/Titre1]
...
[Titre1]essai[/Titre1]';
 
$stag = preg_quote('[Titre1]');
$etag = preg_quote('[/Titre1]');
 
$r = '|'.$stag.'(.*?)'.$etag.'|s';
preg_match_all($r, $s, $a);
 
print_r($a[1]);
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 15h59   #7
Membre habitué
 
Étudiant
Inscription : janvier 2006
Messages : 501
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2006
Messages : 501
Points : 113
Points : 113
ok merci,

en fait mon probleme, c'est que j'ai une présentation du type :
[R]AAAA[/R]
[ss]eee[/ss]
[ss]fff[/ss]

[R]BBBB[/R]
[ss]ttt[/ss]
[ss]yyy[/ss]

et ca se répète sur le même modèle...

Avec :
Code :
1
2
3
4
5
6
7
 
preg_match_all(\[R\](.+)\[/R\]£U', $string, $matches);
foreach ($matches[1] as $key => $value)
{ 
	/* j'affiche $value */
 
}
J'arrive à afficher correctement les différents [R][/R] :

AAAA

BBBB

mais j'ai un probleme pour afficher ce qu'il y a dedans à chaque fois, j'arrive pas délimiter, j'arrive afficher tout le reste mais il se met dans chaque [R][/R] comme ca :
AAAA
eee
fff
ttt
yyy

BBBB
eee
fff
ttt
yyy

Je ne sais pas si vous voyez ce que je veux dire ?

Merci
++
italiasky est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2007, 20h50   #8
Membre éprouvé
 
Avatar de goodpz
 
Inscription : février 2007
Messages : 475
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 475
Points : 474
Points : 474
Je ne suis pas sûr d'avoir bien compris ton dernier post. Je me lance quand même:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$str = '[R]AAAA[/R]
[ss]eee[/ss]
[ss]fff[/ss]
 
[R]BBBB[/R]
[ss]ttt[/ss]
[ss]yyy[/ss]';
$i = 0;
 
preg_match_all('!\[R\](.+?)\[/R\].+?(?=\[R\]|$)!s', $str, $a);
foreach ($a[0] as $s) {
  preg_match_all('|\[ss\](.+?)\[/ss\]|', $s, $m);
  echo $a[1][$i];
  print_r($m[1]);
  ++$i;
}
Obligé de passer par 2 preg ayant essayé ça en vain:

Code :
'|\[R\](.+?)\[/R\](?:\s*\[ss\](.+?)\[/ss\])+|'
Comme le nombre de [ss] pour chaque [R] est variable, on ne peut pas capturer finement chaque sous occurrence de [ss] (seul le dernier d'une série est capturé). Ou alors si quelqu'un sait comment contourner ça, je suis preneur.
goodpz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h11.


 
 
 
 
Partenaires

Hébergement Web