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

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Rappeler une sous chaine dans une expression rationelle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Rappeler une sous chaine dans une expression rationelle

n°692990
enfoiro
a nickname is just a nickname
Posté le 05-04-2004 à 17:57:40  profilanswer
 

Salut,
Voici le bout de coede. On ouvre un fichier et on regarde chaque ligne pour voir si elle correspond au pattern suivant. Ensuite, on veut recuperer une partie de cette chaine dans une variable. Cette partie est entouree de parenthese. Mais la partie qu'on veut recuperer peut changer en fonction des desideratas de l'utilisateur. Comment alors faire comprendre a perl qu'il faut qu'il aille chercher par exemple dans le contexte en dessous la variable $2 ou $3 sachant que l'on a $col_num qui represente le nombre de la colonne a choper. En fait, j'ai pensé à un truc du style de ce que j'ai mis en dessous, ou alors "\$"."$col_num" mais ca marche pas. Une idée ?
 
++
joa
 
if ($_=~ /^([0-9]*\.[0-9]+)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?.[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t?(-?[0-9]*\.[0-9]+\S?-?[0-9]?)?\t?(-?[0-9]*\.[0-9]+\S?-?[0-9]?)?/ ) {
   }
      push(@tempModesArray,$"$col_num" );

mood
Publicité
Posté le 05-04-2004 à 17:57:40  profilanswer
 

n°693123
matafan
Posté le 06-04-2004 à 03:55:16  profilanswer
 

Déjà, écrit \d au lieu de [0-9] et ça sera plus clair. Ensuite pour ton problème (si j'ai bien compris ce que tu veux), il suffit de récupérer le résultat de ta regexp dans un tableau : if (@a = /ton_truc_imbitable/), puis à accéder $a[$col_num].

n°693183
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-04-2004 à 09:22:33  profilanswer
 

c'est pas bo :o

Code :
  1. /^(\d*\.\d+)(\t(-?\d*\.\d+\S?-?\d?)){6}/


et tu y devrait y voir un peu plus clair ( si elle marche :p )

n°693341
enfoiro
a nickname is just a nickname
Posté le 06-04-2004 à 11:20:13  profilanswer
 

Salut,
 
Merci pour vos reponses. Oui, c pas bo ce truc mais ca reste comphréensible car loin d'etre un perl wizard je suis plutot un perl newbie. Cependant une petite question : comment recuperer le resultat de l'expression rationelle dans un tableau ?
Il suffit d'affecter le resultat à un tableau ?
 
Merci,
Joa

n°693401
anapajari
s/travail/glanding on hfr/gs;
Posté le 06-04-2004 à 11:36:34  profilanswer
 

oui matafan ayant oublié 2/3 caractères je pense :o

Code :
  1. @array = ($_=~ /^([0-9]*\.[0-9]+)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?.[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t(-?[0-9]*\.[0-9]+\S?-?[0-9]?)\t?(-?[0-9]*\.[0-9]+\S?-?[0-9]?)?\t?(-?[0-9]*\.[0-9]+\S?-?[0-9]?)?/ ) ;

n°693969
pospos
Posté le 06-04-2004 à 18:05:09  profilanswer
 

Ouai pourkoi tu utilise pas \d comme le dit Anapajai?
 
mais ya une petite erreur dans son adaptation de ta regexp:

Code :
  1. /^(\d*\.\d+)(?:\t(-?\d*\.\d+\S?-?\d?)){4,6}/


 
et donc effectivement pour recuperer tout ca tu fait:

Code :
  1. my @array = /^(\d*\.\d+)(?:\t(-?\d*\.\d+\S?-?\d?)){4,6}/;
  2. push(@tempModesArray, $array[$col_num];


(ya pas besoin de rajouter "$_ =~", c'est implicite)
 
sinon pour ta regexp de depart, t'es certain qu'elle marche?
pasque les \S au milieu d'une expressionc 'est jamais tres bon signe


Message édité par pospos le 06-04-2004 à 18:05:24
n°710401
el muchach​o
Comfortably Numb
Posté le 28-04-2004 à 08:02:44  profilanswer
 

Il y a dans le topic "Outils pour bien programmer" un excellent outil pour tester ses expressions régulières (pour windows).


Message édité par el muchacho le 28-04-2004 à 08:03:21

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

  [Perl] Rappeler une sous chaine dans une expression rationelle

 

Sujets relatifs
Expression ValidatorRecuperer des bouts de chaine ...
[Perl] Comment décoder du UTF8 si pas de module sur le serveur ?[PHP] convertir une chaîne en nombre
analyse d'une chaine lettre par lettre[Perl] regrouper des lignes différentes en une seule ttes les n lignes
[Perl] Package Cvs 0.06Probleme d'execution de la commande Unix echo via le perl
remplacement de chaine de caractères replace ne marche pas(vb6)[VBA-Word] chaine dynamique : longueur annoncée et longueur réelle
Plus de sujets relatifs à : [Perl] Rappeler une sous chaine dans une expression rationelle


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