Problème pour parser du contenu en PHP


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Problème pour parser du contenu en PHP

Message le Mar Fév 02, 2010 20:51

Bonjour à tous,

Je souhaite parser du contenu de type texte via un script PHP qui ne ressort QUE les chaines de caractères comprises entre deux chaines de caractères.
Exemple:

dans la chaine: "toto toto toto r tutu z toto toto" je souhaite ressortir tout ce qui se trouve entre "r" et "z"
j'ai donc mis en place une petite regex

Code: Tout sélectionner
<?php
$chaine = "toto toto toto r tutu z toto toto";
$chaine = preg_replace('^#(.*)r(.*)z(.*)#$i', '$2', $chaine);
echo $chaine;
?>


Mais malheureusement ça ne fonctionne pas, quelqu'un peut-il m'aider ? je ne suis pas certain qu'il faille prendre preg_replace d'ailleurs.
Merci d'avance

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2686
Inscription: 13 Fév 2004

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 2:33

preg_match est probablement plus indiqué, mais c'est surtout ta regexp qui pose problème... les ^ et $ devraient être à l'intérieur des # (qui servent à encadrer la regex elle-même, en fait, et séparer les flags qui se trouvent après). Et si tu n'as pas besoin de certains bouts, ne mets pas de (), ça ne les capturera pas... Et comme tu veux ignorer ce qu'il y a au début ou à la fin, tu peux carrément les virer avec les ^ et $

Donc '#r(.*)z#i' devrait largement suffire (note que ça ne tient pas compte du fait que r ou z soient au milieu d'un mot ou pas).

Et http://php.net/manual/en/function.preg-match.php devrait mieux faire l'affaire.

Jacques.


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 9:25

jcaron a écrit:preg_match est probablement plus indiqué, mais c'est surtout ta regexp qui pose problème... les ^ et $ devraient être à l'intérieur des # (qui servent à encadrer la regex elle-même, en fait, et séparer les flags qui se trouvent après). Et si tu n'as pas besoin de certains bouts, ne mets pas de (), ça ne les capturera pas... Et comme tu veux ignorer ce qu'il y a au début ou à la fin, tu peux carrément les virer avec les ^ et $

Donc '#r(.*)z#i' devrait largement suffire (note que ça ne tient pas compte du fait que r ou z soient au milieu d'un mot ou pas).

Et http://php.net/manual/en/function.preg-match.php devrait mieux faire l'affaire.

Jacques.



Merci beaucoup de ton aide Jacques,
Oui effectivement j'ai fais une erreur dans mon exemple, d'habitude du place correctement les ^ et $ :oops:
Par contre la méthode que tu m'indique fonctionne mais ne semble pas correspondre à mon besoin.
En effet preg_match me retourne un booléen selon que la chaine de caractère existe ou non, mon but à moi est justement d'isoler cette chaine de caractères du reste du texte.


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 9:55

ben64btz a écrit:Par contre la méthode que tu m'indique fonctionne mais ne semble pas correspondre à mon besoin.
En effet preg_match me retourne un booléen selon que la chaine de caractère existe ou non, mon but à moi est justement d'isoler cette chaine de caractères du reste du texte.

Il retourne un booléen, mais c'est le (3°) paramètre "$matches" qui t'intéresse dans ce cas.


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 11:09

c'est quoi ressortir pour toi ? supprimer le contenu ou le récupérer ?


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 12:18

Leonick a écrit:c'est quoi ressortir pour toi ? supprimer le contenu ou le récupérer ?


Oui ressortir c'est bien récupérer uniquement le contenu de ma parenthèse et pas le contenu présent avant ni après


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Problème pour parser du contenu en PHP

Message le Mer Fév 03, 2010 14:06

donc c'est bien le preg_match qui va t'aider, en notifiant la variable de retour dans laquelle tu vas récupérer tes données sous forme de tableau


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 04, 2010 11:45

Ok ça marche merci à tous !! :)


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 04, 2010 11:50

Bon si vous tombez par hasard sur ce topic, voici la réponse :)

Code: Tout sélectionner
<?php
$subject = "toto toto toto r tutu z toto toto";
$pattern = '/r (.*) z/';
preg_match($pattern, $subject, $matches);
echo $matches[1];
?>


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 04, 2010 11:50

Bon si vous tombez par hasard sur ce topic avec la même problématique, voici la réponse :)

Code: Tout sélectionner
<?php
$subject = "toto toto toto r tutu z toto toto";
$pattern = '/r (.*) z/';
preg_match($pattern, $subject, $matches);
echo $matches[1];
?>


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 04, 2010 12:08

et si tu veux ne pas tenir compte de la casse (maj/min), ajoute un "i" au masque
Code: Tout sélectionner
$pattern = '/r (.*) z/i';


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 04, 2010 22:44

sure :)


ben64btz
WRInaute discret
WRInaute discret
 
Messages: 204
Inscription: 9 Mai 2006

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 11, 2010 19:57

ok maintenant un second problème avec la même regex.
J'aimerai cette fois, non pas retourner la première occurrence trouvée dans la chaine, mais TOUTES les occurrences de la chaine.

si on reprend la regex précédente on a:

Code: Tout sélectionner
<?php
$subject = "toto toto toto r tutu z toto toto r voiture z r chat z";
$pattern = '/r (.*) z/i';
preg_match($pattern, $subject, $matches);
echo $matches[1];
?>


Mais ici $matches[1] ne retourne que tutu.
Ce que j'aimerai c'est que la regex me retourne tutu voiture chat

J'ai cherché sur le net mais je ne trouve pas la solution, quelqu'un peut_il m'aider s'il vous plait :roll:
Merci d'avance :)


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8578
Inscription: 23 Nov 2005

Re: Problème pour parser du contenu en PHP

Message le Jeu Fév 11, 2010 20:00



Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Calculer le ratio de liens profonds
    Cet outil vous permet de calculer le taux de liens profonds vers un site web. Un lien profond est un lien qui ne pointe pas vers la page d'accueil mais au contraire vers une page interne du site. Les sites dont l'essentiel du référencement vient de leurs inscriptions dans des annuaires ont un taux de liens profonds faible ; à l'inverse, les sites de référence ont souvent un taux de liens profonds plus important, signe que leur contenu a suscité de nombreux liens spontanés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité