Problème pour parser du contenu en PHP
14 messages
• Page 1 sur 1
-

ben64btz - WRInaute discret

- Messages: 204
- Inscription: 9 Mai 2006
Problème pour parser du contenu en PHP
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
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
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

- Messages: 2686
- Inscription: 13 Fév 2004
Re: Problème pour parser du contenu en PHP
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.
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

- Messages: 204
- Inscription: 9 Mai 2006
Re: Problème pour parser du contenu en PHP
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 $
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

- Messages: 4382
- Inscription: 14 Mai 2003
Re: Problème pour parser du contenu en PHP
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.
-

ben64btz - WRInaute discret

- Messages: 204
- Inscription: 9 Mai 2006
Re: Problème pour parser du contenu en PHP
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
-

ben64btz - WRInaute discret

- Messages: 204
- Inscription: 9 Mai 2006
Re: Problème pour parser du contenu en PHP
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

- Messages: 204
- Inscription: 9 Mai 2006
Re: Problème pour parser du contenu en PHP
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

- Messages: 19595
- Inscription: 8 Aoû 2004
Re: Problème pour parser du contenu en PHP
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

- Messages: 204
- Inscription: 9 Mai 2006
Re: Problème pour parser du contenu en PHP
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:
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
Merci d'avance
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
Merci d'avance
-

UsagiYojimbo - WRInaute accro

- Messages: 8578
- Inscription: 23 Nov 2005
Re: Problème pour parser du contenu en PHP
En utilisant http://www.php.net/manual/fr/function.preg-match-all.php ?
14 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- parser le contenu d'un swf
- Parser xml php
- parser un flux dotclear en php
- Parser XMl avec PHP 5
- [PHP] parser de fichiers Atom
- Parser une page web en utilisant php
- [PHP/MySQL] Parser le résultat d'une BDD
- Parser RSS en PHP... un item ne passe pas !
- DOM Parser (probleme)
- Parser et mettre en page php un gros flux xml
- Google dépose 2 brevets pour AdSense - 26-03-2004
- Brevet de Google sur le contenu dupliqué - 03-01-2007
- Un brevet de Google pour de la publicité sur les téléphones mobiles - 10-01-2006
- Prise en compte de la mise en page HTML par les moteurs de recherche - 15-03-2008
- Google obtient un brevet sur le Social Bookmarking - 20-04-2006
- Google Automat = Google Base + AdWords - 10-11-2005
- AdWords API Version 3 - 02-02-2006
- 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é
