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 18/11/2010, 13h36   #1
Membre éprouvé
 
Inscription : août 2006
Messages : 586
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : août 2006
Messages : 586
Points : 401
Points : 401
Par défaut extraire un nombre variable de fois le même pattern

Bonjour,

Je bloque un peu sur la manière de procéder. Grosso modo, j'ai une chaine de caractère qui contient des séries telles que :

Code :
1
2
<deb><el>Element1</el><el>Element2</el><el>Element3</el></deb>
<deb><el>Element1</el><el>Element2</el><el>Element3</el><el>Element4</el></deb>
et je voudrais en extraire un tableau contenant les 'ElementN'... en les capturant par des () dans preg_replace mais je ne vois vraiment pas par quel bout prendre ce problème ? (N peut varier entre 1 et 10, ou 15 ou 20, et sans prévenir, évidemment).

Merci pour toute suggestion !

Marc
[Hugo] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h18   #2
Modérateur
 
Inscription : septembre 2010
Messages : 6 998
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 6 998
Points : 8 311
Points : 8 311
Hello, si tu veux tout les éléments tu peux faire

Code :
preg_match_all('/(?<=<el>)(.*?)(?=<\/el>)/', $str, $matches);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h32   #3
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 056
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 056
Points : 1 563
Points : 1 563
Salut,

On peut le faire aussi en deux temps si tu désires grouper les éléments.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$str="
<deb><el>Element1</el><el>Element2</el><el>Element3</el></deb>
<deb><el>Element1</el><el>Element2</el><el>Element3</el><el>Element4</el></deb>
";
 
preg_match_all('%(?<=<deb>)\s*(?:(<el>.+?</el>)\s*)(?=</deb>)%si', $str, $matches, PREG_PATTERN_ORDER);
echo "<dl>\n";
foreach($matches[1]as $list){
	echo '<dt>'.htmlspecialchars($list)."</dt>\n";
	preg_match_all('%(?<=<el>)\s*(.+?)\s*(?=</el>)%si', $list, $items, PREG_PATTERN_ORDER);
	foreach($items[1]as $item){
		echo '<dd>'.htmlspecialchars($item)."</dd>\n";
	}
}
echo "</dl>\n";
?>
Nous renvoie...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<el>Element1</el><el>Element2</el><el>Element3</el>
 
	Element1
	Element2
	Element3
 
<el>Element1</el><el>Element2</el><el>Element3</el><el>Element4</el>
 
	Element1
	Element2
	Element3
	Element4
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 14h53   #4
Membre éprouvé
 
Inscription : août 2006
Messages : 586
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : août 2006
Messages : 586
Points : 401
Points : 401
Merci tout plein, vous êtes des dieux !!

Marc
[Hugo] 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 08h18.


 
 
 
 
Partenaires

Hébergement Web