probleme avec preg_replace

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme avec preg_replace

Re: probleme avec preg_replace

par stealth35 » 27 juil. 2011, 22:53

pour parser du HTML c'est DOMDocument et pour les balise meta y'a get_meta_tags

Re: probleme avec preg_replace

par jojolapine » 27 juil. 2011, 22:51

Tu faits beaucoup de manipulations pour rien ;)

Essaye de faire ceci:
<?php

$site=file_get_contents('http://www.larosedelorient.com');

preg_match("#<title>(.*)</title>#si",$site,$modif);
var_dump($modif);
preg_match("#meta.+name=description.+content=(.+).+/?>#iU",str_replace(array('"','<'),'',$site),$modif1);
var_dump($modif1);
Tu verras qu'il y a tout ce qu'il faut dans le tableau de résultat ;)
Autre question, pourquoi enlève tu le chevron (<) pour la deuxième regexp ?

Re: probleme avec preg_replace

par hakazizi » 27 juil. 2011, 22:42

encore merci jojolapine tu vient de me debloquer.
Et ci dessous le code pour ceux que cela interresse.
<?php
$site=file_get_contents('http://www.larosedelorient.com');
preg_match("#<title>(.*)</title>#si",$site,$modif);
$titre=str_ireplace(array('<title>','</title>'),'',$modif[0]);
preg_match("#meta.+name=description.+content=(.+).+/?>#iU",str_replace(array('"','<'),'',$site),$modif1);
$description=preg_replace("#meta.+content=||>#i","",$modif1[0]);
echo htmlentities($titre);echo"<br>".htmlentities($description)."";
?>

Re: probleme avec preg_replace

par jojolapine » 27 juil. 2011, 21:32

Voici un exemple fonctionnel : http://lumadis.be/regex/test_regex.php?id=848
Utilise plutôt preg_match() pour récupérer du contenu.
Bonne continuation ;)

Re: probleme avec preg_replace

par hakazizi » 27 juil. 2011, 21:21

merci jojolapine.
Ma finalité est de recuperer le titre d'une page d'un site ainsi que le contenu de la balise metat description les stocker dans une bd pour alimenter un moteur de recherche.
je viens de tester et cela ne fonctionne pas mieux voici le code j'ai adapter ce que tu m'as dit.
<?php
$site=file_get_contents('http://www.larosedelorient.com');
$modif=preg_replace("#.+<title>#i","",$site);
$modif=preg_replace("#</title>.+#i","",$modif);
echo htmlentities($modif);
?>

Re: probleme avec preg_replace

par jojolapine » 27 juil. 2011, 21:10

J'ai pas vraiment compris pourquoi tu utilises un classe si compliquée dans ton premier exemple...
pourquoi ne pas simplement faire:

Code : Tout sélectionner

#<title>.+</title>#i
Puisqu'à priori tu n'auras qu'une seule balise title dans la page... Non ?
Quel est le but final de l'opération?
On ne comprend pas trop, tu veux obtenir le contenu de <title /> ? le remplacer, virer carrément la balise?

Re: probleme avec preg_replace

par hakazizi » 27 juil. 2011, 20:55

En fait après quelques recherches c'est la même chose mais je ne comprend pas pourquoi cela ne fonctionne pas.
En ajoutant des parenthèse cela n'apporte pas grand chose.
J’ai également viré le "strtolower" et j'ai ajouté le i pour que la fonction soit insensible à la casse.
Merci.
mon code est ci-dessous.
<?php
 $site=file_get_contents('http://www.site.com');
 $modif=preg_replace("/(.*)<title>/i","",$site);
 $modif=preg_replace("/<\/title>(.*)/i","",$modif);
 echo htmlentities($modif);
 ?>
 

Re: probleme avec preg_replace

par hakazizi » 23 juil. 2011, 19:20

Merci ryle mais j'ai choisit une autre route mais j'ai encore un problème. car c'est beaucoup plus simple.
ne fonctionne pas
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=preg_replace("/.*<title>/","",$site);
$modif=preg_replace("/<\/title>.*/","",$modif);
echo htmlentities($modif);
?>
alors que
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=ereg_replace(".*<title>","",$site);
$modif=ereg_replace("</title>.*","",$modif);
echo htmlentities($modif);
?>
fonctionne parfaitement.
Le souci c'est que ereg est en sursis et il va bientôt disparaître.
Je voudrais savoir quel est l'équivalent de ".*" d'ereg en preg.
Merci.

Re: probleme avec preg_replace

par Ryle » 23 juil. 2011, 14:56

C'est sans doute parce que ton titre fait plus d'un caractère alors que ton expression ne recherche qu'un seul caractère entre les balises <title></title> ... ;)

Tu peux ajouter un + ou une * selon ce que tu veux obtenir pour recherche de 1 à N ou de 0 à N caractères :)

probleme avec preg_replace

par hakazizi » 23 juil. 2011, 14:35

Bonjour je voudrais récupérer le titre d'une page web le problème c'est que le preg replace ne fait rien il ne retire pas le title.
En espérant que pour la balise meta description ce sera plus facile (je ne m'y suis pas encore attaque vue que je bloque déjà sur le titre).
<?php
$site=strtolower(file_get_contents('http://www.site.com'));
$modif=preg_replace("/<title>[a-z0-9 éèêëàâäîïûùüôöøç.,\?;:\#&@'\+\-]<\/title>/","//",$site);
echo $modif;
$site_modifier=str_replace($modif,'',$site);
//echo $sitemodifer;
?>