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 07/10/2011, 11h35   #1
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Problème de regex très simple

Bonjour,

Je chercher à faire un regex très simple qui permet de trouver cette balise <entry> dans une chaine telle que <entry>test</entry>

voici le code que j'ai testé:
Code :
preg_match_all('/<entry>/', '<entry>test</entry>', $matches);
mais ce code ne retourne aucun résultat alors que lorsque je le teste sur ce site http://regex.larsolavtorvik.com/ le résultat donné est bon.

Il y aurait-il un problème de compatibilité, de version PHP ?

Merci d'avance pour votre aide !
i-mowgly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 11h52   #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
si tu veux parser du XML c'est SimpleXML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/10/2011, 13h48   #3
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Bonjour,

Merci pour ta réponse mais je cherche juste une balise dans du texte, est-ce vraiment nécessaire d'utiliser autre chose que preg_match() ?

Merci
i-mowgly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 13h54   #4
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 i-mowgly Voir le message
Bonjour,

Merci pour ta réponse mais je cherche juste une balise dans du texte, est-ce vraiment nécessaire d'utiliser autre chose que preg_match() ?

Merci
si ton fichier est du XML ou du HTML tu dois utiliser les bons outils
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 14h10   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
J'aurais tendance à être d'accord avec stealth. Si tu veux récupérer le contenu d'une balise xml, le plus simple c'est d'utiliser un parser d'xml.
Cela dit, si tu veux juste vérifier la présence de la balise dans ta chaine, strpos pourrait amplement suffire.
Code :
1
2
3
4
5
if (strpos('<entry>', '<entry>test</entry>') !== false){
  echo 'trouvé !';
} else {
  echo 'non trouvé';
}
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 15h56   #6
Invité de passage
 
Femme
Inscription : octobre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Femme

Informations forums :
Inscription : octobre 2011
Messages : 3
Points : 0
Points : 0
Merci pour ta réponse mais le problème c'est que je chercher la cinquième balise <entry> présente dans mon texte..

La chose que je ne comprends vraiment pas c'est pourquoi ceci
Code :
preg_match_all('/<entry>/', '<entry>test</entry>', $matches);
fonctionne sur un site de test comme http://regex.larsolavtorvik.com/ et pas sur mon serveur ?
Auriez vous une idée?

Merci pour vos réponses
i-mowgly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 16h01   #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
montre ton "texte"
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 16h47   #8
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
Citation:
Envoyé par Celira Voir le message
Cela dit, si tu veux juste vérifier la présence de la balise dans ta chaine, strpos pourrait amplement suffire.
Oui, mais la performance n'est pas toujours du côté de strpos.

http://www.php.net/manual/en/functio...tch.php#105598

Citation:
As I guessed, strpos() is always faster (about 2x) for short strings like a URL but for very long strings of several paragraphs (e.g. a block of XML) when the string doesn't start with the needle preg_match as twice as fast as strpos() as it doesn't scan the entire string.

So, if you are searching long strings and expect it to normally be true (e.g. validating XML), strpos() is a much faster BUT if you expect if to often fail, preg_match is the better choice.
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/10/2011, 18h23   #9
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 661
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 661
Points : 5 388
Points : 5 388
Citation:
Envoyé par i-mowgly Voir le message
Merci pour ta réponse mais le problème c'est que je chercher la cinquième balise <entry> présente dans mon texte..

La chose que je ne comprends vraiment pas c'est pourquoi ceci
Code :
preg_match_all('/<entry>/', '<entry>test</entry>', $matches);
fonctionne sur un site de test comme http://regex.larsolavtorvik.com/ et pas sur mon serveur ?
Auriez vous une idée?

Merci pour vos réponses
Test fait, j'obtiens exactement le même résultat que ta page de test
Est-ce que le problème ne serait pas plutôt au niveau de l'exploitation du résultat ? Peux-tu nous montrer le code qui va autour de ce morceau là ?

Citation:
Envoyé par s.n.a.f.u Voir le message
Oui, mais la performance n'est pas toujours du côté de strpos
J'étais persuadée que pour chercher une chaine simple, strpos était plus rapide (sans l'avoir réellement vérifié...) J'apprends plein de trucs à poster sur les mêmes threads que toi
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 18h25   #10
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
Citation:
Envoyé par Celira Voir le message
J'étais persuadée que pour chercher une chaine simple, strpos était plus rapide (sans l'avoir réellement vérifié...) J'apprends plein de trucs à poster sur les mêmes threads que toi
Et pourtant personne ne me donne des points
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 11/12/2011, 00h14   #11
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : conception et traitement de documents xhtml
Secteur : Conseil

Informations forums :
Inscription : août 2011
Messages : 107
Points : 59
Points : 59
Citation:
Envoyé par stealth35 Voir le message
si tu veux parser du XML c'est SimpleXML
Quand faut-il raisonner en DOM et quand est-il préférable de raisonner en SimpleXML ?
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 05h14   #12
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 Doc_xhtml Voir le message
Quand faut-il raisonner en DOM et quand est-il préférable de raisonner en SimpleXML ?
SimpleXML est moins lourd que DOMDocument, donc pour du XML SimpleXML pour le HTML DOMDocument
DOMDocument les plus complete au niveau des Xpath, et fonctionne pour tout type de DOM (XML = DOM mais DOM != XML)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 10h51   #13
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : conception et traitement de documents xhtml
Secteur : Conseil

Informations forums :
Inscription : août 2011
Messages : 107
Points : 59
Points : 59
Citation:
Envoyé par stealth35 Voir le message
SimpleXML est moins lourd que DOMDocument
Tu reconnais donc implicitement que DOMDocument est quand même lourd.
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 16h36   #14
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 Doc_xhtml Voir le message
Tu reconnais donc implicitement que DOMDocument est quand même lourd.
pour faire un trou t'utilises une perceuse ou un marteau avec un tourne vis ? le débat est le même
Et ce que je comprendre pas c'est quand javascript tout le monde utilise l'API DOm et personne ne fait du regexp pour parser son document ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2011, 18h04   #15
Membre du Club
 
Homme Boris
conception et traitement de documents xhtml
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Boris
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : conception et traitement de documents xhtml
Secteur : Conseil

Informations forums :
Inscription : août 2011
Messages : 107
Points : 59
Points : 59
Citation:
Envoyé par stealth35 Voir le message
Et ce que je comprendre pas c'est quand javascript tout le monde utilise l'API DOm et personne ne fait du regexp pour parser son document ?
C'est la question que je me pose lorsque je parcours le tutoriel DOM de W3C dont les exemples sont entièrement écrits en JavaScript.

Je pense qu'une première explication réside dans la syntaxe de DOM utilisée respectivement par JavaScript et par péachpé :
En JavaScript, un code tel que
Code :
1
2
3
x=xmlDoc.getElementsByTagName("title")[0];
y=x.childNodes[0];
txt=y.nodeValue;
fait mieux ressortir les notions de propriété et de méthode et permet une lecture intuitive de la structure des instructions.
Par exemple, on comprend bien que
Code :
getElementsByTagName("title")[0]
représente une entité.
De ce fait, on fait du DOM en JavaScript comme Monsieur Jourdain faisait de la prose : sans le savoir.

En péachpé, à cause de l'utilisation de la flèche -> au lieu du point, la syntaxe paraît moins évidente et moins groupée.
Code :
1
2
3
$x = $xmlDoc -> getElementsByTagName("title") -> item(0);
$y = $x -> childNodes -> item(0);
$txt = $y -> nodeValue;
Dire donc que, fondamentalement, le DOM en PHP n'est ni plus ni moins que le DOM en JavaScript, aux petites différences de syntaxe près (-> au lieu du point ; -> item(i) au lieu de [i] ...) permet sans doute de démystifier sensiblement DOM.


La deuxième explication que je vois est que les regex sont perçues en PHP comme une panacée universelle qu'on peut appliquer pour toutes les recherches, notamment pour parser du html. (Il semble en effet a priori plus naturel de rechercher une chaîne de caractères paramétrée que d'analyser un arbre de document.)
Alors qu'en JavaScript, RegExp est probablement perçue comme une fonction particulière de javascript et n'a peut-être pas l'aura qu'ont les expressions régulières en PHP.


Une troisième explication, à mon sens, réside dans le fait que DOM a été introduit dans PHP, alors qu'il existe implicitement dans JavaScript.
La documentation de DOM PHP porte donc très nettement l'empreinte de cette insertion et semble de ce fait difficile d'accès.


Une quatrième explication réside peut-être dans le fait que JavaScript est initialement davantage perçu comme un langage permettant de générer du html dynamique (voir la multitude d'effets visuels plus ou moins heureux qu'on ajoute aux pages html) que comme un outil d'analyse du code html.
Alors que PHP est davantage perçu comme un outil de traitement de code html avant renvoi au navigateur des pages traitées.
Doc_xhtml est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web