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

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Y a-t-il un dieu des expressions régulières dans la salle?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Y a-t-il un dieu des expressions régulières dans la salle?

n°258796
djtoz
Posté le 02-12-2002 à 12:05:12  profilanswer
 

tous ce qui commence par un "/" suivi d'un "-" apres un nombre entre "1" et "9" puis une lettre en minuscule entre "a" et "z" et un "_", tous ca repete zero ou plusieurs fois.
 
ensuite un autre "/" et puis n'importe quoi apres jusqu'a la fin
 
tu recupere ds $1 ce qu'il y a avant le 2eme "/" et ds $2 ce qu'il y a apres
 
bon suis sur que me suis gourre quelques part... ;)

mood
Publicité
Posté le 02-12-2002 à 12:05:12  profilanswer
 

n°258862
djtoz
Posté le 02-12-2002 à 13:48:55  profilanswer
 

xlA a écrit a écrit :

 
Honnêtement... Je pense que oui :D merci qd même pour la tentative :p




 
ben en fait y a que le premier "-" et le "_" ou je susi pas sur de la signification
mais sinon le reste a prioris g juste...

n°258884
deliriumtr​emens
sic transit intestinal...
Posté le 02-12-2002 à 14:22:28  profilanswer
 

Me semble que ce qu'a dit djtoz est pas loin de la vérité.
 
Seule différence, ce qui est en gras:  
 
1) doit commencer par un /
 
2)ensuite, chaîne pouvant contenir des chiffres entre 1 et 9, des caractères entre a et z, et/ou des - et/ou des _, le tout en quantité infinie...
 
3)/
4)fin à choix
 
Donc
 
/abc_123-zz/xxx par exemple, serait correct.
 
Ce qu'il y a entre [] n'indique pas un ordre d'apparition, mais les caractères possibles.
 
J'epère que c'est clair
 
Bref : chemin de fichiers...
 
Edit : par contre je sais pas ce qu'est le m# (connais rien en Perl ;) )


Message édité par deliriumtremens le 02-12-2002 à 14:24:21
n°258894
djtoz
Posté le 02-12-2002 à 14:37:03  profilanswer
 

ben le m veut dire match, donc ce qui va matcher la regex
 
et pis par defaut c'est le caractere "/" qui delimite la regex, mais tu peut en utiliser d'autre et dans ce cas la, ben c'est le "#" qui sert de delimiteur.

n°258895
deliriumtr​emens
sic transit intestinal...
Posté le 02-12-2002 à 14:40:00  profilanswer
 

djtoz a écrit a écrit :

ben le m veut dire match, donc ce qui va matcher la regex
 
et pis par defaut c'est le caractere "/" qui delimite la regex, mais tu peut en utiliser d'autre et dans ce cas la, ben c'est le "#" qui sert de delimiteur.




tu es une perl(e)  :jap:

n°258923
deliriumtr​emens
sic transit intestinal...
Posté le 02-12-2002 à 15:02:02  profilanswer
 

^ = début de l'expression à tester (ce qui suit le ^ = le premier caractère à tester)
 
$ = fin de l'expression à tester

n°259132
djtoz
Posté le 02-12-2002 à 17:43:55  profilanswer
 

deliriumtremens a écrit a écrit :

^ = début de l'expression à tester (ce qui suit le ^ = le premier caractère à tester)
 
$ = fin de l'expression à tester




 
petite precision
^ ca correspond au debut de la ligne
et $ la fin de la ligne
 
c'est peut etre ce que tu voulais dire, mais alors j'ai mal compris et je m en excuse par avance :D
 
pis juste pour info le "m" n'est pas necessaire ds ce cas.


Message édité par djtoz le 02-12-2002 à 17:45:33
n°260401
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 08:18:01  profilanswer
 

Tiens, en parlant de "dieu des RegExp", si y en a un qui pouvait me donner la RegExp au problème suivant :
 
$toto contient une chaîne contenant des espaces éventuels et des chiffres
 
quand par exemple $toto contient ceci "    1224   ", je veux récupérer "1224"
quand $toto contient "   1 2 3 4  ", je veux récupérer "1 2 3 4"
 
j'ai fait qq tests mais c'est pas tjs concluant, qqun a la solution ?


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°260403
djtoz
Posté le 04-12-2002 à 08:38:58  profilanswer
 

Aricoh a écrit a écrit :

Tiens, en parlant de "dieu des RegExp", si y en a un qui pouvait me donner la RegExp au problème suivant :
 
$toto contient une chaîne contenant des espaces éventuels et des chiffres
 
quand par exemple $toto contient ceci "    1224   ", je veux récupérer "1224"
quand $toto contient "   1 2 3 4  ", je veux récupérer "1 2 3 4"
 
j'ai fait qq tests mais c'est pas tjs concluant, qqun a la solution ?




 
my ($recup) = $toto =~ /^\s*(.*)\s*$/
 
essai ca

n°260406
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 08:53:42  profilanswer
 

merci pour ta propal mais ça donne les mêmes résultats que chez moi, exemple de code :
 

Code :
  1. my @Liste = ( "TOTO 1224 TOTO",
  2.  "TOTO  1224   TOTO",
  3.  "TOTO   1 224   TOTO",
  4.  "TOTO    12 24  TOTO",
  5.  "TOTO    122 4  TOTO",
  6.  "TOTO   1 2 24  TOTO",
  7.  "TOTO  1 2  2  4   TOTO",
  8.  "TOTO    1 2 2 4   TOTO",
  9.  "TOTO   12 2 4   TOTO",
  10.  "TOTO   12 24    TOTO" );
  11. open(LOG, ">toto.log" ) or die();
  12. for(my $i = 0; $i < scalar(@Liste); ++$i) {
  13.     $_ = $Liste[$i];
  14.     print LOG "Ligne ", $i+1, " = ";
  15.     if (/^TOTO\s*(.*)\s*TOTO$/) {
  16. print LOG "\"$1\"\n";
  17.     } else {
  18. print LOG "no matching\n";
  19.     }
  20. }


 
Le retour de l'analyse écrite dans le log donne ça :

Code :
  1. Ligne 1 = "1224 "
  2. Ligne 2 = "1224   "
  3. Ligne 3 = "1 224   "
  4. Ligne 4 = "12 24  "
  5. Ligne 5 = "122 4  "
  6. Ligne 6 = "1 2 24  "
  7. Ligne 7 = "1 2  2  4   "
  8. Ligne 8 = "1 2 2 4   "
  9. Ligne 9 = "12 2 4   "
  10. Ligne 10 = "12 24    "


 
Mon blème, les espaces devant le 1er chiffre, ça roule je les récupère pas, par contre je conserve les espaces APRES le dernier nombre, ça marche pas comme je veux


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
mood
Publicité
Posté le 04-12-2002 à 08:53:42  profilanswer
 

n°260437
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 10:14:18  profilanswer
 

bah alors djtoz, t passé où ?  ;)
 
y a personne qu'a la soluce ?  :cry:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°260457
arghbis
salops de dauphins
Posté le 04-12-2002 à 10:50:41  profilanswer
 

ben c normal! tu prends tout ds ta regexp!
mets plutôt un truc genre (\d+) au lieu de (.*)

n°260458
djtoz
Posté le 04-12-2002 à 10:50:42  profilanswer
 

Aricoh a écrit a écrit :

bah alors djtoz, t passé où ?  ;)
 
y a personne qu'a la soluce ?  :cry:  




 
ben si c tjours 1224:
 
my ($recup) = $toto =~ /^\s*(1.*4)\s*$/


Message édité par djtoz le 04-12-2002 à 10:55:13
n°260474
djtoz
Posté le 04-12-2002 à 10:58:13  profilanswer
 

arghbis a écrit a écrit :

ben c normal! tu prends tout ds ta regexp!
mets plutôt un truc genre (\d+) au lieu de (.*)




 
oue mais la si y a des espaces entre les nombres, ca va po le faire :/

n°260487
arghbis
salops de dauphins
Posté le 04-12-2002 à 11:03:08  profilanswer
 

certes, mais je donne une piste, y peut chercher qd même non??  
sinon : (\s*(\d+)\s*)+ ça marche :whistle:

n°260488
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 11:03:14  profilanswer
 

djtoz a écrit a écrit :

 
 
ben si c tjours 1224:
 
my ($recup) = $toto =~ /^\s*(1.*4)\s*$/



ben non, les chiffres sont aléatoires  :lol:  
 
En fait, il faut que je récupère ces chiffres, et tester si c'est bien des int
 
Ainsi, si j'ai trouvé "1224", conversion en int OK
Si je trouve "1 2 24", ben là c'est pas OK
 
C'est ça qu'il faut que je vérifie au final mais avant tout, je dois me débarrasser de tous les espaces AVANT et APRES cette chaîne.
 
Pour l'instant, je fais comme ça :

Code :
  1. my $chaine = "   12 24    ";
  2. while ($chaine =~ /^ (.+)$/) {
  3.     $chaine = $1;
  4. }
  5. while ($chaine =~ /^(.+) $/) {
  6.     $chaine = $1;
  7. }


Avec ça, si au départ j'ai "   12 24   ", au final je récupère bien ce que je veux, c-a-d "12 24"
 
Seulement, c'est pas tip top niveau syntaxique ni en tps de traitement car mon blème, c'est que des vérifs de valeur comme celle-ci, j'en ai une bonne centaine à faire !  :??:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°260548
djtoz
Posté le 04-12-2002 à 11:38:17  profilanswer
 

bon c pas non plus tip top
mais celle la elle marche
 
/^\s*(\d[\s*|\d]+\d)\s*$/


Message édité par djtoz le 04-12-2002 à 11:39:12
n°260549
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 11:38:53  profilanswer
 

djtoz a écrit a écrit :

bon c pas non plus tip top
mais celle la elle marche
 
/^\s*([\s*|\d]+\d)\s*$/



attend, je teste tout d'suite !


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°260556
Aricoh
gentil mais fo po pousser
Posté le 04-12-2002 à 11:42:03  profilanswer
 

djtoz a écrit a écrit :

bon c pas non plus tip top
mais celle la elle marche
 
/^\s*(\d[\s*|\d]+\d)\s*$/



yes yes YES !!!
 
Ca donne ça en retour :
Ligne 1 = "1224"
Ligne 2 = "1224"
Ligne 3 = "1 224"
Ligne 4 = "12 24"
Ligne 5 = "122 4"
Ligne 6 = "1 2 24"
Ligne 7 = "1 2  2  4"
Ligne 8 = "1 2 2 4"
Ligne 9 = "12 2 4"
Ligne 10 = "12 24"
 
Ca marche mais j'ai pas tout capté à ta RegExp, merci gars !  :jap:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°260569
djtoz
Posté le 04-12-2002 à 11:46:42  profilanswer
 

Aricoh a écrit a écrit :

yes yes YES !!!
 
Ca donne ça en retour :
Ligne 1 = "1224"
Ligne 2 = "1224"
Ligne 3 = "1 224"
Ligne 4 = "12 24"
Ligne 5 = "122 4"
Ligne 6 = "1 2 24"
Ligne 7 = "1 2  2  4"
Ligne 8 = "1 2 2 4"
Ligne 9 = "12 2 4"
Ligne 10 = "12 24"
 
Ca marche mais j'ai pas tout capté à ta RegExp, merci gars !  :jap:  




 
/^\s*(\d[\s*|\d]+\d)\s*$/
 
ben en fait  
^\s* :       les premier espaces (zero ou plusieurs)
(\d :       un nombre
[\s*|\d]+ : soit zero ou plusieurs espaces ou alors un nombre (repete une fois ou plusieurs)
\d)         un nombre
\s*$ :      les derniers espaces
 
voilou


Message édité par djtoz le 04-12-2002 à 11:47:51
mood
Publicité
Posté le   profilanswer
 


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

  [Perl] Y a-t-il un dieu des expressions régulières dans la salle?

 

Sujets relatifs
Forums FR sur perl ?![perl] comment peut on recuperer le repertoire courant
Gestion des threads en Perl[DEFI] Y a t-il des hackers en herde dans la salle ??
Expressions régulièresExpression régulières
[Perl] Des bons sites pour apprendre?Executer un script PHP à partir dun script perl ....
Aide sur les regexp de Perl 
Plus de sujets relatifs à : [Perl] Y a-t-il un dieu des expressions régulières dans la salle?


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