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 08/02/2011, 18h04   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
Par défaut Isoler une chaïne par le biais d'une expression régulière

Bonjour,

Comment faire pour isoler une chaine inconnue mais que l'on peut extraire par le biais d'un balisage commun ?

Je m'explique, prenons l'exemple de la balise title de cette page.
<title>Forum des professionnels en informatique - Ouvrir une nouvelle discussion</title>

On sait que title s'ouvre ainsi <title> et se ferme par </title>.

L'idée extraire uniquement : Forum des professionnels en informatique - Ouvrir une nouvelle discussion

Autre exemple (plus proche de mon cas)
Code html :
1
2
 
<option="x">item</option><option="x">item</option>

Isoler x jusqu'à la première </option> rencontrée.

Merci de votre aide.

HPL76
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 18h06   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
pour parser du HTML c'est avec DOMDocument
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 18h42   #3
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
Encore toi !!!

Ca fonctionne même avec la syntaxe ci-dessous :
Code :
<Author Val="Verlaine" />
car je vois dans les exemples :
Code :
1
2
3
4
5
<europe>
    <pays>France</pays>
    <pays>Belgique</pays>
    <pays>Espagne</pays>
  </europe>
?

HPL76
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 19h32   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par hpl76 Voir le message
Encore toi !!!

Ca fonctionne même avec la syntaxe ci-dessous :
Code :
<Author Val="Verlaine" />
car je vois dans les exemples :
Code :
1
2
3
4
5
<europe>
    <pays>France</pays>
    <pays>Belgique</pays>
    <pays>Espagne</pays>
  </europe>

?

HPL76
ouai ca marchera, mais la si c'est du XML, donc tu peux aussi utiliser SimpleXML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h57   #5
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
Bonjour,

J'ai utilisé simpleXML, qui me donne ceci

Code :
1
2
3
4
5
$xmlstr = '...<auteur val="RIMBAUD" />...';
 
$xml = new SimpleXMLElement($xmlstr);
 
print_r($xml);//renvoie [auteur] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => RIMBAUD)
J'ai essayé ceci :
mais ca ne renvoie rien

Où est-ce que je faute ?

HPL76
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h01   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
je t'ai répondu sur l'autre, evite de faire de cross posting c'est pas très agréable pour ceux qui répondent
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h20   #7
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
Désolé stealth35, je ne savais pas que tu étais sur les 2 forums. En même temps, j'ai 2 choses à l'esprit : 1 - je suis pris par le temps (chose que tu dois connaitre/comprendre je pense), 2 - un problème résolu servira forcément à autrui.

Tes interventions et celles des autres m'ont énormément fait progressé sur les webservices, notions complètement vagues il y a une semaine et pour ça je te remercie.

Le :
Code :
echo $xml->auteur->attributes()->val;
me renvoie un :
Code :
Warning: main() [function.main]: Node no longer exists in C:\wamp\www\ws\parser.php on line 9
Je me suis dit que c'était p'tet le @ dans [@attributes] mais ca n'y change rien.

Bien à toi.

HPL
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h25   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
ou

Code :
$xml->attributes()->val;
apres tu peux toujour faire comme si c'était un array et faire [@attributes]
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h37   #9
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
J'avais essayé $xml->attributes()->val; mais nada et le souci c'est que j'ai aussi un autre champ prenom avec un @attribute

Code :
[Prenom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Arthur) ) [Nom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Rimbaud))
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h43   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par hpl76 Voir le message
J'avais essayé $xml->attributes()->val; mais nada et le souci c'est que j'ai aussi un autre champ prenom avec un @attribute

Code :
[Prenom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Arthur) ) [Nom] => SimpleXMLElement Object ( [@attributes] => Array ( [val] => Rimbaud))
c'est comme un array pour y accéder y'a pas de mystère derrière, montre ton xml complet
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h53   #11
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
Merci pour ta réactivité !

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
$xmlstr = '<query><result><champs id="0"><Prenom Val="Arthur" /><Nom Val="RIMBAUD" /></champs></result></query>
';
 
$xml = new SimpleXMLElement($xmlstr);
 
echo '<pre>'.print_r($xml).'</pre>';
 
echo $xml->Prenom->attributes()->Val;
 
?>
Aclmt,

HPL
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 12h05   #12
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
J'ai réussi à afficher "Arthur" en faisant :

Code :
echo $xml->result->champs->Prenom->attributes()->Val;
Ca sous-entend que tu es pleinement dépendant de la structure. Tu peux pas attaquer à un point précis du xml ?

Du coup, j'ai du mal à voir ce qui mieux entre une expression régulière et le simplexml...si demain la structure du xml bouge. Comment faire ?

Il faut réadapter le script à chaque fois ?

HPL76
hpl76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 13h37   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par hpl76 Voir le message
Du coup, j'ai du mal à voir ce qui mieux entre une expression régulière et le simplexml...si demain la structure du xml bouge. Comment faire ?
faudra changer aussi le regexp, utilise une requete xpath sinon
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2011, 16h48   #14
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 180
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 180
Points : 34
Points : 34
C'est cool stealth35, tout fonctionne !!!

Un exemple pour d'autres :
Code :
1
2
3
4
5
6
7
8
9
10
 
$xmlstr = '<query><result><champs><prenom val="Arthur" /><nom val="RIMBAUD" /></champs></result></query>';
 
$xml = new SimpleXMLElement($xmlstr);
 
echo '<pre>'.print_r($xml).'</pre>';
 
echo $xml->result->champs->prenom->attributes()->val;
echo ' ';
echo $xml->result->champs->nom->attributes()->val;
Cthulhu nfang !

HPL
hpl76 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 08h03.


 
 
 
 
Partenaires

Hébergement Web