comparaison avec une expression régulière - Shell/Batch - Programmation
Marsh Posté le 22-05-2007 à 16:19:22
bon je pense que le problème est que l'expression * n'est pas reconnu il faut donc remplacer * par \{0,\}
expr_reg="bo\{0,\}"
mot="bonjour"
if ( expr $mot : $expr_reg ) then
echo "yep"
else
echo "nop"
fi
voila là ça marche ...
Marsh Posté le 22-05-2007 à 20:35:44
Fais gaffe, je crois que tu confonds deux truc différents : l'opérateur ":" de "expr" qui marche avec des regexp, et le == qui prend (avec les shells qui le supportent) un pattern qui n'est pas une regexp ; c'est juste un pattern du même genre que pour l'expension des nom de fichiers.
Marsh Posté le 24-05-2007 à 18:44:15
benjiji a écrit : Voila j'aimerai comparer une chaine de caractère avec une expression régulière |
ton premier test, est vraiment etrange, "==" n estp as fait pour tester des expressions reguliere pour moi. mais juste l egalite de string.
ensuite tu t es trompé dans ton expression reguliere, tu voulais peut etre ecrire
bo.*
car bo* correspond par exemple à boooooooo mais pas a bonjour
Marsh Posté le 25-05-2007 à 08:51:52
qqcvd a écrit : ton premier test, est vraiment etrange, "==" n estp as fait pour tester des expressions reguliere pour moi. mais juste l egalite de string. |
La forme '[[ ... ]]' différe quelque peu par rapport à '[ ... ]'
Citation : [[ expression ]] |
:
Les opérateurs == et = font la même chose (standard POSIX: =)
Attention, dans la forme [
], lopérateur = est le test dégalité entre deux chaînes
Jean-Pierre.
Marsh Posté le 25-05-2007 à 09:10:54
Oui mais quoi qu'il en soit le == entre [[ ]] ne prend pas une regexp. Il prend un pattern du même type que pour les filename expansion (et là effectivement bo* veut dire "bo suivi de n'importe quoi). L'operateur ":" de expr, lui, prend par contre une regexp (et là il bo* veut dire "b suivit de 0 o ou d'un nombre quelconque de o" ).
Marsh Posté le 30-05-2007 à 23:20:57
tu peux essayer
echo $mot | grep $exp_reg >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo yep
else
echo nop
fi
en protegant eventuellement $mot et $exp_reg par des guillemets s'il y a des risques qu'ils soient nulls
Marsh Posté le 22-05-2007 à 15:44:54
Voila j'aimerai comparer une chaine de caractère avec une expression régulière
Sur une machine Sun je peux faire comme ça :
expr_reg="bo*"
mot="bonjour"
if [[ $mot == $expr_reg ]] then
echo "yep"
else
echo "nop"
fi
voila là ça marche niquel
Mais sur une machine HP il faut que je change la conditon car ça ne marche pas
expr_reg="bo*"
mot="bonjour"
if ( expr bonjour : "\($expr_reg\)" ) then --> voila cette ligne est fausse
echo "yep"
else
echo "nop"
fi
si quelqu'un pouvais me dire comment faire ça serai cool
merci
Message édité par benjiji le 22-05-2007 à 15:55:15