splitter une chaine suivant 2 delimiteurs

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 : splitter une chaine suivant 2 delimiteurs

par risa83 » 21 mai 2007, 17:46

Merci je ne connaissais pas cette fonction

Je vais tester

:D

par naholyr » 21 mai 2007, 17:38

En expression régulière ce que tu veux faire c'est matcher tout ce qui est entre Delim1 et Delim2, et dans ce langage ça se dit Delim1(.*?)Delim2.
Un preg_match_all() avec cette expression régulière te donnera ce que tu cherches (et n'oublie pas d'appliquer un coup de preg_quote() sur tes délimiteurs vu qu'ils ont des caractères zarbi).

par risa83 » 21 mai 2007, 17:19

@mere-teresa: Je veux stocker toutes les chaines présentes entre les 2 deéimiteurs

Par expl: Délimiteur1=*8 et Délimiteur2=$32

$str= "*8 aabbcc $32 fsdlk *8 ddeeff $32 nlsd"

je veux pouvoir récupérer "aabbcc" et "ddeeff" que je stocke dans un tableau ..

par mere-teresa » 21 mai 2007, 15:58

Est-ce que tes résultats de recherche sont dans un tableau, ou bien ce sont les mots précis (donc chaîne) que tu veux repérer ?

par risa83 » 21 mai 2007, 14:22

@Hubert Roksor :
Pour etre un peu plus précis, mon but est de récupérer le positionnement d'un recherche sur un moteur de recherche. Les 2 délimiteurs me permettent de calculer le positionnement au fur et à mesure en fonction du code source résultant...

J'espere avoir été clair :lol:

Re: splitter une chaine suivant 2 delimiteurs

par Hubert Roksor » 21 mai 2007, 13:11

Pensez vous que c'est la meilleure solution?
Il n'y a pas de "meilleure solution", tout dépend du type de données, la taille moyenne des chaînes, le nombre de chaînes à traiter, le nombre d'éléments par chaînes, etc...

preg_split() a les meilleures chances d'être rapide et constant, mais si tu veux une meilleure réponse il faudrait nous en dire un petit peu plus.

par Invité » 21 mai 2007, 13:07

Pardon, j'ai posté un peu vite ...
Une condition peut être ajoutée dans le foreach afin de ne garder que les chaines contenant le délimiteur :
// Solution strchr()
foreach ($tab as $line)
    if (strchr(':', $line) !== false) $dump[] = explode(':', $line);

par Invité » 21 mai 2007, 13:03

Je pense que la meilleure solution est de la forme :
$str = 'aaa:xxx/mmm:zzz/truc:chose';
$tab = explode('/', $str);

$dump = array();

foreach ($tab as $line)
    $dump[] = explode(':', $line);

// $dump vaudra :
//  0 => array('aaa', 'xxx')
//  1 => array('mmm', 'zzz')
//  2 => array('truc', 'chose')

par titerm » 21 mai 2007, 12:17

Et pourquoi pas utiliser split() qui est fait pour ca et capable de gérer autant de séparateur que l'on veut ?

par Maitrepylos » 21 mai 2007, 11:27

Et pourquoi ne pas remplacer ton deuxième délimiteurs par le premiers et puis splitter?

splitter une chaine suivant 2 delimiteurs

par risa83 » 21 mai 2007, 11:22

Bonjour,

Je souhaite splitter une chaine suivant 2 delimiteurs dans un tableau.
J'ai trouvé la fonction basique "preg_split" qui à partir d'un chaine découpe suivant un délimiteur et range le resultat dans un tableau.

Pour résoudre mon problème, j'ai pensé créer une fonction qui split une première fois la chaine suivant mon 1er delimiteur puis qui parcourt le tableau créé afin de retirer les éléments ne contenant pas mon 2ème delimiteur ...

Le problème de cette fonction est que le temps de traitement risque d'etre un peu long.

Pensez vous que c'est la meilleure solution?

Merci