SIMPLE ALGORITHME POUR RÉCUPERER UNE CHAINE DE CARACTERE DANS UNE PAGE WEB

cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009 - 10 janv. 2007 à 17:35
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 12 janv. 2007 à 13:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41050-simple-algorithme-pour-recuperer-une-chaine-de-caractere-dans-une-page-web

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 janv. 2007 à 13:25
DOMINION, "Qui n'a jamais réinventé les regexp une fois dans sa vie ?", euh... personellement, j'ai souvent fait sans, mais jamais recodé un match... et je ne dois pas être le seul dans ce cas...
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
11 janv. 2007 à 19:47
Cool le lien, il a l'air bien fait :)

J'ai testé ta fonction kankrelune, c'est vraiment bien ce tableau de match_all, encore merci à tous, bye.
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
11 janv. 2007 à 19:04
vas sur http://www.vulgarisation-informatique.com/expressions-regulieres.php (le site d'anthomicro) tout est expliqué ;-)
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
11 janv. 2007 à 18:50
C'est vrai c'est burk, j'osai pas le dire.
Sur ce lien, j'ai beaucoup ris :
1er exemple, niveau facile... hummm ok.
2eme exemple, niveau facile... ok
3eme exemple, niveau difficile :
preg_match('`^[[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]
([-_.]?[[:alnum:]])*\.([a-z]{2,4})$`',$chaine);

On dirais mon chat quand il marche sur le clavier.

http://www.expreg.com/pregmatch.php
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
11 janv. 2007 à 18:27
l'avantage des regexps, c'est que ça marche pour tout (ou presque). Tu as aussi, dans le cas du php, une nette amélioration des perfs : ton code est directement exécuté par l'interpréteur PHP, ce qui est évidemment plus rapide. Et comme tu l'as dit, les options de filtres sont très utiles !!! Le seul véritable défaut que j'ai jamais trouvé dans les regexps, c'est cette syntaxe proprement dégeulasse où finalement tu comprends plus rien (vu que les espaces pour clarifier le code ne sont pas permises...)
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
11 janv. 2007 à 18:15
Merci pour vos commentaires :)
J'irai voir à quoi ressemble ces expression rationelles mais en attendant ma méthode me parait plus simple et plus courte :p
Mais j'avou que le fait de pouvoir mettre des options de filtre peut etre interessant dans certains cas.
Bonne année !
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
11 janv. 2007 à 17:43
Salut all !
Bonne année 2007 à vous tous !
kankrelune > petite correction sur une portion de ton code, un ) de trop

$find = searchAndFind('http://www.phpcs.com/','Derniers Codes</h2>','');

bye
cs_dominion Messages postés 230 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 15 mai 2008
11 janv. 2007 à 16:06
Qui n'a jamais réinventé les regexp une fois dans sa vie ? Maintenant que tu sais que ca existe déjà, Joe, je te conseille viviement d'apprendre a t'en servir, c'est d'une puissance et d'une souplesse invraissemblable ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
11 janv. 2007 à 16:03
function searchAndFind( $link, $word1, $word2 = null, $noCase = true, $findAll = false)
{
if(false ($handle @fopen($link, "rb")))
return false;

$datas = '';

while (!@feof($handle))
$datas .= @fread($handle, 8192);

@fclose($handle);

$word1 = preg_quote($word1,'~');

if(is_null($word2))
$word2 = $word1;
else
$word2 = preg_quote($word2,'~');

$option = '';

if($noCase === true)
$option = 'i';

if($findAll === false)
preg_match('~'.$word1.'(.*?)'.$word2.'~s'.$option,$datas,$matches);
else
preg_match_all('~'.$word1.'(.*?)'.$word2.'~s'.$option,$datas,$matches,PREG_SET_ORDER);

$ret = array();
if(!empty($matches))
{
if($findAll === false)
$ret[] = $matches[1];
else
{
$i = -1;

while(isset($matches[++$i]))
$ret[] = $matches[$i][1];
}
}

return $ret;
}

$find = searchAndFind('http://www.phpcs.com/','Derniers Codes</h2>',''));

if(empty($find))
echo 'String not found';
else
echo $find[0];


@ tchaOo°
audayls Messages postés 373 Date d'inscription samedi 9 juillet 2005 Statut Membre Dernière intervention 11 août 2008
10 janv. 2007 à 21:51
Salut,
Je suis d'accord avec "Garfield90". Tu utilises beaucoup de fonctions pour pas grand chose ...

"$retour = preg_match('`'.$word.'(.+?)'.$word2.'`sim',$retour);
return $return[0];" devrait donner le même résultat (enfin normalement :-P)
JoebarGlut Messages postés 111 Date d'inscription mercredi 13 août 2003 Statut Membre Dernière intervention 17 octobre 2007
10 janv. 2007 à 19:20
Ok, c'est pas très explicite comme fonctions et dur à trouver.
Parfois faut se débrouiller comme on peut :)
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
10 janv. 2007 à 17:35
Oui, ca s'appele les expressions rationnelles (régulières)
-> preg_*
-> ereg_*

Y a plus qu'a regarder dans le manuel