Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1305 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Aide sur les regexp de Perl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide sur les regexp de Perl

n°245611
physis
Posté le 14-11-2002 à 21:43:28  profilanswer
 

Je cherche a mettre en place une fonction de filtrage en Perl a l'aide de ses expressions regulieres.
 
J'ai donc besoin d'une regexp utilisee dans un if pour faire ca:
 - faux pour une chaine qui contient la sequence 'ti',
 - vrai sinon.
 
(par exemple 'tata' est bon, 'tati' et 'tita' ne sont pas bons).
 
Je peux faire ca: /[a-su-z][a-hj-z]/ mais je me demande si on pourrait pas definir un ensemble et lui dire "tout sauf 't' et 'i'" (comme on fait en math pour les ensembles 'R-{5}' -> l'ensemble des reels sans 5).
 
Merci d'avance
 
 

mood
Publicité
Posté le 14-11-2002 à 21:43:28  profilanswer
 

n°245621
impulse
Posté le 14-11-2002 à 21:59:16  profilanswer
 

Code :
  1. /ti/


 
c'est pas equivalent a ta regexp ?
 

n°245624
physis
Posté le 14-11-2002 à 22:10:06  profilanswer
 

impulse a écrit a écrit :

Code :
  1. /ti/


 
c'est pas equivalent a ta regexp ?
 




 
non justement je veux une regexp qui qui permet de laisser passer toutes les chaines de caracteres sauf celles qui contiennent la sequence 'ti'.


Message édité par physis le 14-11-2002 à 22:11:23
n°245644
impulse
Posté le 14-11-2002 à 22:40:23  profilanswer
 

Citation :

non justement je veux une regexp qui qui permet de laisser passer toutes les chaines de caracteres sauf celles qui contiennent la sequence 'ti'.

 
 
Euh... tu pourrais pas prendre le pb ds l'autre sens :
 
Si la chaine contient "ti" ...
Sinon ...

n°245657
physis
Posté le 14-11-2002 à 23:01:57  profilanswer
 

la raison pour laquelle je veux utiliser une seule regexp c'est que cette expression va etre mise dans un fichier ini a partir duquel le script viendra chercher son filtre.
 
du coup il me suffira de changer cette exp seulement dans le fichier ini au lieu de me balader dans le source du script.
 
en gros je cherche un truc comme un fait en maths quand on definit des ensembles sans qq points, genre R-{5,9}.
 
ya pas une regexp pour decrire "[a-z] sans {t,i}" ?

n°245658
lorill
Posté le 14-11-2002 à 23:03:21  profilanswer
 

je sais qu'on peut utiliser la negation dans une regexp
pour la syntaxe, c'est une autre histoire

n°245721
Aricoh
gentil mais fo po pousser
Posté le 15-11-2002 à 09:29:03  profilanswer
 

En fait, si tu as une chaine contenant "tata toto tati", tu ne veux récupérer que "tata toto" ou bien récupérer TOUT sauf "ti" (comme ici : "tata toto ta" ) ?
 
CAS 1 : virer toute chaîne contenant titi

Code :
  1. $string = "tata toto tati titi";
  2. @_ = split(/ /, $string);
  3. $string = "";
  4. foreach my $mot(@_) {
  5.     if ($mot !~ /ti/) {
  6.         $string .= " $mot" if ($string);
  7.         $string .= $mot if (! $string);
  8.     }
  9. }


résultat : $string contient désormais "tata toto"
 
CAS 2 : supprimer toute séquence de 2 lettres == "ti"

Code :
  1. $string = "tata toto tati titi";
  2. while($string =~ /^(.*)ti(.*)$/) {
  3.     $string = $1 . $2;
  4. }


résultat : $string contient désormais "tata toto ta "
 
Je précise : les 2 exemples ci-dessus sont montrés clairement (du - j'espère !) mais il y a moyen de faire + efficace, en étant + propre, mais aussi (c'est mon avis) en faisant moins clair pour la compréhension
 
Zut, j'arrête po d'éditer mon post   :whistle:  
 
Pour le CAS 2 : on peut aussi faire sacom :
 

Code :
  1. $string = "tata toto tati titi";
  2. $string =~ s/ti//g;


Message édité par Aricoh le 15-11-2002 à 09:33:20

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°245797
physis
Posté le 15-11-2002 à 11:35:25  profilanswer
 

merci aricoh de m'aider mais ce que tu m'as fourni n'est pas tout a fait c eque je cherche: je ne cherche qu'une regexp et pas un moreceau de code.
 
je m'explique: cette regexp est destinee a etre placee dans un fichier d'initialisation que l'on modifiera a souhait pour effectuer des operations de filtrage sur une liste de fichiers, sans avoir a modifier le script perl.
 
ayant une liste de fichiers, je veux accepter certains fichiers (notamment tous ceux qui correspondent au pattern defini avec cette regexp), donc ceux qui sont du type 'xxxxxxti.xxx' et 'xxxxxxtu.xxx' ne doivent pas etre acceptes.

n°245812
Toucouch
Posté le 15-11-2002 à 12:06:56  profilanswer
 

Code :
  1. /t(?:[^i]|$)|[^t]/g

n°245815
Aricoh
gentil mais fo po pousser
Posté le 15-11-2002 à 12:14:55  profilanswer
 

physis a écrit a écrit :

je m'explique: cette regexp est destinee a etre placee dans un fichier d'initialisation que l'on modifiera a souhait pour effectuer des operations de filtrage sur une liste de fichiers, sans avoir a modifier le script perl.



 
Ok, alors dans ce cas, il faudrait que ton fichier d'initialisation contienne la liste des mots-clés à bannir/accepter uniquement
 
Ensuite, te reste plus qu'à exécuter le script Perl en lui fournissant la dite liste des mots clés via @ARGV


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Aide sur les regexp de Perl

 

Sujets relatifs
Aide pour conception d'un prog ...[installeur d'appli] aide!
Comment trouver l'IP du serveur en Perlaide et expliquations
Besoin d'aide pour creer une fonction PHP[Delphi] Aide de Delphi
[Perl] Configuration d'apache[PHP] Besoin d'aide ... explications à l'interieur ... merci
[PHP] Besoin d'aide pour un exploreur de dossier FTPBesoin d'aide pour un compteur html
Plus de sujets relatifs à : Aide sur les regexp de Perl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR