expressions regulieres : faire le contraire

Le
bonjour

je souhaiterais ne conserver d'une chaine seulement les parties qui
verifient une expression reguliere

une sorte de ereg_replace inverse en qq sorte

je m'explique. la ligne suivante ne va conserver dans area que tout ce qui
n'est pas toto suivi d'un nombre

$area=ereg_replace("(toto[0-9])","",$area);

hors je voudrais justement que la ligne ejecte tout ce qui n'est pas toto
suivi d'un nombre (il peut y avoir une centaine de toto suivi d'un nombre
dans la chaine et je ne veux garder que ceux la)

je ne sais pas comment faire et je ne trouve rien qui parle de ca
il y a bien le circonflexe d'interdiction dans les classes de caracteres
mais pour les chaines je donne ma langue au chat.

si vous avez des idees, elles sont les bienvenues

--
ampac
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Antoine Dinimant
Le #574944
a écrit:
je souhaiterais ne conserver d'une chaine seulement les parties qui
verifient une expression reguliere


le raisonnement complet s'est fait au fur et à mesure de la discussion
sur alt.fr.comp.lang.php, mais comme je suis très content de moi :-) je
poste ici la soluttion :


voici une boucle qui marche, sur une regex simplifiée :

<?php
$texte = "fgjkha1lkdsfa2ksdfla3kdf" ;

while (ereg("(a[0-9])", $texte, $resu)) {
$tablofinal[] = $resu[1] ;
$texte = substr($texte, strpos($texte, $resu[1]) + strlen($resu[1])) ;
}

echo "éléments trouvés :
?>

Paul Delannoy
Le #575134
a écrit:
bonjour

je souhaiterais ne conserver d'une chaine seulement les parties qui
verifient une expression reguliere
une sorte de ereg_replace inverse en qq sorte


Ca c'est la fonction ereg : http://fr.php.net/manual/en/function.ereg.php
ou mieux preg_match :
http://fr.php.net/manual/en/function.preg_match.php

strstr peut aussi se révéler utile si vous ne noules pas sortir les
'totoi' tous d'un seul coup...

Paul Delannoy
Le #574740
Antoine Dinimant a écrit:
a écrit:

je souhaiterais ne conserver d'une chaine seulement les parties qui
verifient une expression reguliere



le raisonnement complet s'est fait au fur et à mesure de la discussion
sur alt.fr.comp.lang.php, mais comme je suis très content de moi :-)


Ah bon, content de réinventer une fonction PHP existante (ereg,
preg_match) ?


Eric Daspet
Le #574734
wrote:
je souhaiterais ne conserver d'une chaine seulement les parties qui
verifient une expression reguliere


Tu fais un preg_match (ou preg_match_all, suivant si tu attend un seul
résultat ou plusieurs), puis tu concatènes les résultats trouvés.

une sorte de ereg_replace inverse en qq sorte


De toutes façons je te conseille très fortement d'utiliser les preg
plutot que les ereg, coté performances il y a une nette différence

--
Eric Daspet
Venez aider notre mangeur de cigogne sur http://mangeur-de-cigogne.info/

Antoine Dinimant
Le #574565
Ah bon, content de réinventer une fonction PHP existante (ereg,
preg_match) ?


non, de construire la boucle autour. Je ne prétends pas que ça
révolutionne le web, mais c'était le pb posé.

Le #582139
Dans news:,
Antoine Dinimant a dit :

while (ereg("(a[0-9])", $texte, $resu)) {
$tablofinal[] = $resu[1] ;
$texte = substr($texte, strpos($texte, $resu[1]) +
strlen($resu[1])) ; }


merci pour cette bonne reponse.

--
ampac

Olivier Miakinen
Le #581957

Ah bon, content de réinventer une fonction PHP existante (ereg,
preg_match) ?


non, de construire la boucle autour. Je ne prétends pas que ça
révolutionne le web, mais c'était le pb posé.


Comme le signalait Éric Daspet, il vaut mieux utiliser les preg plutôt
que les ereg, et du coup un preg_match_all() retrouve toutes les
occurrences en une seule fois, sans qu'il soit besoin de construire une
boucle autour.


Publicité
Poster une réponse
Anonyme