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 05/10/2011, 14h06   #1
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
Par défaut Regex multiple et simple

Bonjour à tous,

je commence à comprendre le fonctionnement des REGEX, mais je me pose une question, le mieux pour expliquer est d'utiliser l'exemple suivant (oui je sais pour récupérer le contenu des balises html c'est mieux le dom mais c'est juste un exemple) :

Imaginons la ligne suivante (en une seule ligne de code attaché)
Code :
1
2
3
4
5
6
<b>date</b>
<table><tr>
<td>valeur</td>
<td>valeur</td>
<td>valeur</td>
</tr></table>
Pour récupérer avec un REGEX les td, il me suffit de faire :

Code :
preg_match_all('<td>(.*)</td>#Usi',$line,$out);
maintenant, si je veux récupérer aussi la date avec la ligne suivante ça ne fonctionne pas :
Code :
1
2
 
preg_match_all('<b>(.*)</b><td>(.*)</td>#Usi',$line,$out);
sans doute parce que le <td> est répété et pas le <b>.

Quelqu'un à une idée ?
gianni7033 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h08   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
pour parser du HTML c'est DOMDocument
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h17   #3
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
oui mais comme j'ai dis dans mon commentaire c'est juste un exemple, au final j'ai besoin de savoir comment faire avec les REGEX
gianni7033 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h27   #4
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Dans ton exemple, tu n'as jamais l'occurence "</b><td>", donc tu n'obtiens logiquement aucun résultat
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h27   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
pas possible il faut le faire en 2 fois
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h29   #6
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
Citation:
Envoyé par Bovino Voir le message
Dans ton exemple, tu n'as jamais l'occurence "</b><td>", donc tu n'obtiens logiquement aucun résultat
effectivement, je me suis d'ailleur trompé dans ma réponse, je voulais mettre :

Code :
preg_match_all('<b>(.*)</b>.*<td>(.*)</td>#Usi',$line,$out);
maintenant, y a t-il une possibilité de faire en une fois, peût-être avec des parenthèses ?
gianni7033 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 14h32   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par gianni7033 Voir le message
maintenant, y a t-il une possibilité de faire en une fois, peût-être avec des parenthèses ?
fait comme ca :

#(?:<b>.*</b>)|(?:<td>.*</td>)#Usi
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/10/2011, 14h42   #8
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 110
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 110
Points : 37
Points : 37
Code :
1
2
3
4
5
$line = '<b>date</b><table><tr><td>valeur1</td><td>valeur2</td><td>valeur3</td></tr></table><b>date</b><table><tr><td>valeur1</td><td>valeur2</td><td>valeur3</td></tr></table>';
 
preg_match_all('#(<b>.*</b>)|(<td>.*</td>)#Usi',$line,$out);
 
print_r($out); die;
résultat ==>

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
Array
(
    [0] => Array
        (
            [0] => <b>date</b>
            [1] => <td>valeur1</td>
            [2] => <td>valeur2</td>
            [3] => <td>valeur3</td>
            [4] => <b>date</b>
 
            [5] => <td>valeur1</td>
            [6] => <td>valeur2</td>
            [7] => <td>valeur3</td>
        )
 
    [1] => Array
        (
            [0] => <b>date</b>
            [1] => 
            [2] => 
            [3] => 
            [4] => <b>date</b>
 
            [5] => 
            [6] => 
            [7] => 
        )
 
    [2] => Array
        (
            [0] => 
            [1] => <td>valeur1</td>
            [2] => <td>valeur2</td>
            [3] => <td>valeur3</td>
            [4] => 
            [5] => <td>valeur1</td>
            [6] => <td>valeur2</td>
 
            [7] => <td>valeur3</td>
        )
 
)
c'est exactement ce que je voulais, j'ai juste retiré les :? pour avoir bien des array différentes.

Super grand merci, le jour où tu changes de job, je t'engages directe dans ma tite boite
gianni7033 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 21h11.


 
 
 
 
Partenaires

Hébergement Web