Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 09/05/2011, 10h53   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 54
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 54
Points : 13
Points : 13
Par défaut Rechercher une chaine de caractere

Bonjour a tous,

voila j'ai un code qui ouvre des fichiers texte pour recuperer certaines donnees et je recherche une fonction pour cibler ces données .
exemple : "description : Le chat est dans la cour."
j'aimerais récupérer les infos contenu entre "description :" et "."

j'utilise d'abord un file_get_contents puis la fonction eregi()

mais le problème c'est que la fonction ne se limite pas au premier "." pour finaliser ma récuperation , en gros elle va boucler a chaque fois qu'il y aura un point ... (idem avec un strpos puis strlen et un substr )

A tout hasard auriez vous une soluce

Merci d'avance
saperlipopeye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h00   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Et s'il y a plusieurs "description :" ?
Peux-tu donner un exemple de fichier en entrée et d'appel à la fonction ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h04   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 54
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 54
Points : 13
Points : 13
Par défaut merci pour la réponse aussi rapide

merci pour la réponse aussi rapide voila le code :
donc en gros je chope tous les fichiers d'un dossier , je les ouvre un par un et j'affiche certaines infos ... j'espere que cela est a peu près compréhensible ...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
$mydir = 'page/';
 if ($dir = opendir($mydir))
 {
    while (($file = readdir($dir)) !== false)
    {
      if($file != ".." && $file != ".")
       {
 
         $titre = @eregi('description:(.*).',$page,$nom); //1ere soluce avec eregi
          echo $nom[1].'<br>';
 
 
          $marqueurDebutLien = 'description:';
          $debutLien = strpos( $page, $marqueurDebutLien ) + strlen( $marqueurDebutLien );
          $marqueurFinLien = '.';
          $finLien = strpos( $page, $marqueurFinLien );
          $leLien = substr( $page, $debutLien, $finLien - $debutLien );// 2eme soluce
 
          echo $leLien.'<br />';
 
 
       }
    }
closedir($dir);
 }
saperlipopeye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h06   #4
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 54
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 54
Points : 13
Points : 13
Par défaut pardon il manque ceci ...

pardon il manque ceci ...

Code :
1
2
 
$page = file_get_contents('page/'.$file);
saperlipopeye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h21   #5
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Re,
Cela ne répond pas à ma question ;-)
Quel résultat espères-tu s'il y a plusieurs "description:" dans un fichier ? Tu veux juste le premier ? Tous ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h24   #6
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 54
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 54
Points : 13
Points : 13
Pardon ... pour le retard ...

En fait la chaine 'description: ... . ' n'apparait qu'une fois par page (une cinquantaine au total ) mais sa longueur varie selon la page (qui contient evidemment plusieurs '.' ).

merci d'avance !!!
saperlipopeye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h31   #7
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Code :
$titre = @eregi('description:(.*).',$page,$nom);
hérésie.
eregi() est obsolète, il "faut" passer à preg_match()
De plus, "." est un caractère spécial en regex... Il faut donc l'échapper.

Code :
$titre = preg_match ('/description:(.*)\./', $page,$nom);
devrait mieux faire l'affaire, de mémoire.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h39   #8
Candidat au titre de Membre du Club
 
Inscription : juin 2009
Messages : 54
Détails du profil
Informations forums :
Inscription : juin 2009
Messages : 54
Points : 13
Points : 13
GENIAL -- MERCI -- CARREMENT !!!!!
saperlipopeye est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h39   #9
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Je dirais /description : (.*)\./Us

U pour que la recherche s'arrête au premier point
s pour que la recherche puisse s'étendre sur différentes lignes
http://fr.php.net/manual/en/referenc....modifiers.php

preg_match( ) : http://fr.php.net/manual/en/function.preg-match.php
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 11h45   #10
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
J'aurais utilisé "m" comme modifier à la rigueur pour le multi-ligne (même si j'avoue ne l'avoir jamais utilisé, pas plus que le "s" ).

Par contre, je suis "contre" le "U" du ungreedy.

Autant modifier le regex comme ça : *? = Matches 0 or more of the preceeding token. This is a lazy match, and will match as few characters as possible before satisfying the next token.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 09/05/2011, 11h52   #11
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Citation:
Envoyé par Shikiryu Voir le message
J'aurais utilisé "m" comme modifier à la rigueur
T'es sûr qu'il est utilisable avec cette pattern ?
Doc :
Citation:
If there are no "\n" characters in a subject string, or no occurrences of ^ or $ in a pattern, setting this modifier has no effect.
Citation:
Par contre, je suis "contre" le "U" du ungreedy.
Pourquoi ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 12h05   #12
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Non, je ne suis pas sûr du tout, j'essaye d'utiliser les modifier le moins possible.
D'une part, car je ne fais pas super confiance à ceux de PHP et que d'autres part quand un regex est possible sans les utiliser, autant en profiter.

Je trouve cela beaucoup plus clair sans. Il y a des outils pour aider à faire les regex et à contrôler en clair point par point ce que fait telle ou telle partie d'une expression régulière.

J'ai testé mon bout de regex ici : http://regexr.com?2tnca et ça a l'air de fonctionner sans "s" ni "U". Par contre, pour le "s" comme PHP réagit différemment de celui de java ou de PERL, je suis un peu perdu sans test

file_get_contents() contenant une string, je pense que ce test est concluant sur le fait que les 2 modifiers sont, ici, inutiles :

http://codepad.viper-7.com/j1OWMK
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web