Expression régulière capricieuse - Shell/Batch - Programmation
Marsh Posté le 25-01-2011 à 19:00:25
Bonjour,
De mémoire :
\< : début d'un mot
\> : fin d'un mot.
Donc :
\<[A-Za-z0-9_-]*\>
(A tester)
Marsh Posté le 25-01-2011 à 19:09:16
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+,
Marsh Posté le 27-01-2011 à 16:21:10
Code :
|
si j'écris
Code :
|
il me renvoi "ça marche"
et si j'écris
Code :
|
il me renvoi "ça marche" aussi...
et en testant \<[A-Za-z0-9_-]*\>
il me renvoi à tous les coups "ça marche pas"...
Marsh Posté le 27-01-2011 à 16:46:26
Et avec
if [[ "$line" == [A-Za-z0-9_-]* ]];
ça donne quoi?
A+,
Marsh Posté le 27-01-2011 à 18:33:44
C'est peut être un effet de * dans un contexte [[ ]]
Ca donne quoi avec if [ "$line" == [A-Za-z0-9_-]* ];
A+,
Marsh Posté le 28-01-2011 à 09:59:55
Euh, c'est quel shell que tu utilises? bash ?
A+,
Marsh Posté le 28-01-2011 à 18:09:09
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 :
|
A+,
Marsh Posté le 30-01-2011 à 00:56:23
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 !
Marsh Posté le 01-02-2011 à 12:03:26
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"
Marsh Posté le 01-02-2011 à 15:02:01
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+,
Marsh Posté le 25-01-2011 à 17:38:48
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 ?