Problème avec Strpos

Petit nouveau ! | 3 Messages

24 août 2011, 09:53

Bonjour à tous,

voilà des jours que je ne trouve pas solution à mon problème, j'espère que vous pourrez m'éclairer,

j'ai créé un code pour récupérer dans une chaine du texte entouré par deux éléments : INSERT: et :FIN
qui ressemble à ceci : INSERT:mapremiereinfo:FIN

je commence par chercher dans la chaine avec strpos :

Code : Tout sélectionner

$debut = strpos($chaine, 'INSERT:'); $fin = strpos($chaine, ':FIN'); $contenu = substr($chaine, $debut, $fin);
jusque là ça fonctionne, le problème se pose quand j'ai plusieurs éléments dans la chaine, exemple :
INSERT:mapremiereinfo:FIN bla bla INSERT:madeuxiemeinfo:FIN bla bla INSERT:matroisiemeinfo:FIN

dans ce cas, si je lis bien la définition de strpos, il doit me chercher la première occurence, or là $fin
correspond à la dernière, du coup je récupère ceci :
INSERT:mapremiereinfo:FIN bla bla INSERT:madeuxiemeinfo:FIN bla bla INSERT:matroisiemeinfo:FIN

au lieu de INSERT:mapremiereinfo:FIN

quelqu'un aurait une idée ??

Merci,

JC

Eléphant du PHP | 275 Messages

24 août 2011, 11:24

preg_match_all('/INSERT:(.*?):FIN/', $subject, $matches);


foreach ($matches[1] as $valeur) {
}

Petit nouveau ! | 3 Messages

24 août 2011, 11:41

ça m'a l'air d'une bonne idée ;) je vais essayer, merci à toi,

cela dit je ne comprends pas trop pourquoi la première façon bug...

JC

Mammouth du PHP | 2278 Messages

24 août 2011, 12:58

<?PHP
$chaine = "INSERT:mapremiereinfo:FIN bla bla INSERT:madeuxiemeinfo:FIN bla bla INSERT:matroisiemeinfo:FIN";
$debut   = strpos($chaine, 'INSERT:');
$fin     = strpos($chaine, ':FIN');
$contenu = substr($chaine, $debut, $fin+4); 
print "$contenu";
?>
mais le probleme de cette façon de procéder, c'est qu'il est nécessaire de boucler avec des $debut = strpos($chaine,"INSERT:', $fin); ...
il est infinimentplus simple de passer par preg_match_all
cf : http://www.expreg.com/pregmatchall.php
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

24 août 2011, 13:05

hello

oui j'ai effectivement une boucle dans mon code, mais même dans la boucle il
ne prends pas le prochain :FIN, il prends le dernier ;)

je vais effectivement passer à l'autre solution, mais là y'a un bug que je ne comprends pas...

Merci encore,

JC