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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Expression régulière capricieuse

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Expression régulière capricieuse

n°2051797
nebbb
Posté le 25-01-2011 à 17:38:48  profilanswer
 

Bonjour,
 
J'ai un soucis avec cette expression régulière :  
 
[A-Za-z0-9_-]*
 
Placée dans un test elle devrait autoriser l'écriture d'un seul mot, mais elle autorise visiblement les espaces et ainsi d'écrire toute une phrase...
 
Comment pourrais-je exclure l'espace de la expression ?

mood
Publicité
Posté le 25-01-2011 à 17:38:48  profilanswer
 

n°2051822
Ydalb
In Crêpes n' Cidre I Trust!
Posté le 25-01-2011 à 19:00:25  profilanswer
 

Bonjour,
 
De mémoire :
\< : début d'un mot
\> : fin d'un mot.
 
Donc :  
\<[A-Za-z0-9_-]*\>
 
(A tester)


---------------
:o
n°2051824
gilou
Modérateur
Modzilla
Posté le 25-01-2011 à 19:09:16  profilanswer
 

Citation :

mais elle autorise visiblement les espaces et ainsi d'écrire toute une phrase


Non, [A-Za-z0-9_-]* n'autorise pas les espaces, le pb est donc ailleurs.
On pourrait voir le code ou cette regexp est utilisée?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2052428
nebbb
Posté le 27-01-2011 à 16:21:10  profilanswer
 

Code :
  1. read line
  2. if [[ $line == [A-Za-z0-9_-]* ]];
  3. then echo "ça marche"
  4. else echo "ça marche pas"
  5. fi


 
si j'écris  

Code :
  1. blablabla


il me renvoi "ça marche"
 
et si j'écris

Code :
  1. bla bla bla bla bla


il me renvoi "ça marche" aussi...
 
et en testant \<[A-Za-z0-9_-]*\>  
il me renvoi à tous les coups "ça marche pas"...
 

n°2052435
gilou
Modérateur
Modzilla
Posté le 27-01-2011 à 16:46:26  profilanswer
 

Et avec
if [[ "$line" == [A-Za-z0-9_-]* ]];
ça donne quoi?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2052466
nebbb
Posté le 27-01-2011 à 18:00:56  profilanswer
 

Pareil...

n°2052474
gilou
Modérateur
Modzilla
Posté le 27-01-2011 à 18:33:44  profilanswer
 

C'est peut être un effet de * dans un contexte [[  ]]
Ca donne quoi avec if [ "$line" == [A-Za-z0-9_-]* ];  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2052540
nebbb
Posté le 28-01-2011 à 02:28:30  profilanswer
 

il me met un  

Code :
  1. [: too many arguments

n°2052577
gilou
Modérateur
Modzilla
Posté le 28-01-2011 à 09:59:55  profilanswer
 

Euh, c'est quel shell que tu utilises? bash ?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2052752
nebbb
Posté le 28-01-2011 à 17:04:27  profilanswer
 

oui c'est du bash

mood
Publicité
Posté le 28-01-2011 à 17:04:27  profilanswer
 

n°2052769
gilou
Modérateur
Modzilla
Posté le 28-01-2011 à 18:09:09  profilanswer
 

Bon, j'ai testé un peu, je sais pas trop ce que fait == dans un [[ ]] mais c'est bizarre.
 
Après qques essais, j'ai trouvé un truc qui marche:
 

Code :
  1. #!/bin/bash
  2. read line
  3.  
  4. if [[ $line =~ ^[A-Za-z0-9_-]*$ ]];
  5. then echo "ca marche"
  6. else echo "ca marche pas"
  7. fi


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2052956
nebbb
Posté le 30-01-2011 à 00:56:23  profilanswer
 

Et bien je demande où tu as été chercher cette solution mais elle marche au poil !
 
Je te remercie vraiment de t'être autant décarcasser pour mon problème gilou ! merci beaucoup !

n°2053382
Nukolau
Posté le 01-02-2011 à 12:03:26  profilanswer
 

En fait l'étoile signifie 0 a n occurrence de ce qu'il y a entre [ ].
Du coup c'est toujours vrai car même si ca apparait 0 fois l'expression est validée ;)

 

La solution apportée par Gilou corrige le problème car il dit qu'il doit avoir un début de ligne (^), ce qu'il y a entre crochet répété 0 à n fois et une fin de ligne ($).

 

Autrement dit, si un carctère n'étant pas entre crochet apparait, l'expression régulière sera invalidée et la ligne rejetée.

 

Par contre attention, les lignes vides devraient toujours sortir avec cette expression. Pour éviter ça, il faut remplacer l'étoile par un + qui signifie "au moins une fois la partie entre crochet"


Message édité par Nukolau le 01-02-2011 à 12:04:59
n°2053439
gilou
Modérateur
Modzilla
Posté le 01-02-2011 à 15:02:01  profilanswer
 

Vu qu'il avait mis comme expression régulière initiale [A-Za-z0-9_-]* qui autorise les lignes vides, j'avais laissé l'étoile dans ma solution.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Expression régulière capricieuse

 

Sujets relatifs
exp reguliere java[JAVA][LOG4J] Comment ajouter une expression java dans les logs
Expression régulièrela meme expression est interpretée de 2 façons différentes !!
retrouver mot en php avec expression reguliere[KSH] Find : iname + expression régulière ? - RESOLU -
Vérifier si une expression est entre deux balises 
Plus de sujets relatifs à : Expression régulière capricieuse


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