Problème de PATTERN pour REGEX
Bonjour à tous, et d'avance toute mes excuses pour le dérangement.
Je suis actuellement sur un problème ou je m'arrache les cheveux, et n'en ayant plus beaucoup, j'appelle à l'aide.
en BASH, j'ai une variable de longueur variable dans laquelle je dois vérifier les caractères et la valider en fonction d'un PATTERN
entre autre, je dois accepter dans ce PATTERN le crochet fermant ]
J'ai donc une fonction que je vous simplifie comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
function test()
{
local _String=${1};
local _LengthMin=${2};
local _LengthMax=${3};
local _Return=false;
local _PATTERN="^([a-zA-Z0-9_&#@%!:/;,<>\.\{\}\|\+\(\)\$\*\?\[\]-] {${_LengthMin},${_LengthMax}})$";
[[ ${_String} =~ ${_PATTERN} ]] && _Return=true;
echo ${_Return};
}
function test2()
{
local _String=${1};
local _LengthMin=${2};
local _LengthMax=${3};
local _Return=false;
local _PATTERN="^([a-zA-Z0-9_&#@%!:/;,<>\.\{\}\|\+\(\)\$\*\?\[-] {${_LengthMin},${_LengthMax}})$";
[[ ${_String} =~ ${_PATTERN} ]] && _Return=true;
echo ${_Return};
}
# Appel de la fonction test()
titi=$(test "9854139qdb@[$;,DHF564" 12 50); # Retourne false à cause du \]
toto=$(test2 "9854139qdb@[$;,DHF564" 12 50); # Retourne Retourne true mais pas de \] dans le PATTERN
tutu=$(test "9854139qdb@[$;,DHF]564" 12 50); # Retourne false à cause du \]
tata=$(test2 "9854139qdb@[$;,DHF]564" 12 50); # Retourne false --> normal le PATTERN ne prend pas les ] |
Si dans le PATTERN, je retire le \] Ca fonctionne parfaitement
par contre, s'il y a un crochet dans la chaine envoyée, ça ne fonctionne naturellement plus. Or le crochet fermant, fait parti des caractères acceptables ...
Mais dès que le \] est dans le masque du PATTERN, la fonction retourne false quoi qu'il se passe.
D'ou ma petite question, comment échapper ce */+)e!§+ ce "]" pour qu'il soit pris en compte dans le masque autorisé.
Vous remerciant par avance de votre aide.
Bonne journée à tous