Bonjour,

Je demande votre aide car je m'arrache un peu les cheveux avec les expressions régulières.
Le sujet est passionnant mais j'ai du mal à comprendre comment fonctionne la syntaxe avec {}.

Exemples : j'utilise une table EMP avec une colonne salaire. Elle est un peu bizarre (salaire de 1 par exemple) mais c'est juste pour les besoins du test
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
31
32
33
34
USER01@dtx> select nom, salaire from emp order by salaire
NOM                     SALAIRE
-------------------- ----------
DUBOIRES                      1
DDDUBOIRES                   12
FRADUBOIS                   123
DDFRADDUBOISDD             1234
TIMBAUT                   77800
TIMBAUT                   77800
a aab aaabc aaaabcd       80500
DUBOI                     80500
TIMBAUT                   80500
DUBOIS                    80500
DUBOISEAU                 80500
DRABAUD                   88500
DRABAUD                   88500
TIMBAUT                   88500
TIMBAUT                  100000
TIMBAUD                  100000
TIMBAUT                  100000
DRABAUD                  100000
DRABAUD                  100000
dUBOIS                   110000
DUBOI                    200000
DUBOIS12EAU              200000
DUBOIS                   200000
DUBOIS                   200000
TIMBAUT                  200000
DUBOIS                   200000
DRABAUD                  210500
1A
2258AA
 
29 rows selected.
Si j'utilise {n,m} ça fonctionne pour le minimum mais pas pour le maximum --> les champs de 0, 1 et 2 chiffres sont éliminés mais ceux de plus de 5 chiffres sont présents ce qui est anormal!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
USER01@dtx> select nom, salaire from emp where regexp_like ( salaire, '[0-9]{3,5}') order by salaire
NOM                     SALAIRE
-------------------- ----------
FRADUBOIS                   123
DDFRADDUBOISDD             1234
TIMBAUT                   77800
TIMBAUT                   77800
a aab aaabc aaaabcd       80500
DUBOISEAU                 80500
DUBOI                     80500
DUBOIS                    80500
TIMBAUT                   80500
TIMBAUT                   88500
DRABAUD                   88500
DRABAUD                   88500
DRABAUD                  100000
TIMBAUT                  100000
DRABAUD                  100000
TIMBAUD                  100000
TIMBAUT                  100000
dUBOIS                   110000
DUBOIS                   200000
TIMBAUT                  200000
DUBOIS                   200000
DUBOIS                   200000
DUBOIS12EAU              200000
DUBOI                    200000
DRABAUD                  210500
 
25 rows selected.

Si j'utilise {n} ça fonctionne de la même façon que {n,m} --> les champs de 0, 1 et 2 chiffres sont éliminés mais ceux de plus de 5 chiffres sont présents!
Je connais la notion de GREEDY (voracité) pour les expressions régulières mais quand je dis {n} je croyais que ça voulait dire "Un nombre EXACT de caractères" alors que là c'est comme le minimum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
29
30
USER01@dtx> select nom, salaire from emp where regexp_like ( salaire, '[0-9]{3}') order by salaire
NOM                     SALAIRE
-------------------- ----------
FRADUBOIS                   123
DDFRADDUBOISDD             1234
TIMBAUT                   77800
TIMBAUT                   77800
a aab aaabc aaaabcd       80500
DUBOISEAU                 80500
DUBOI                     80500
DUBOIS                    80500
TIMBAUT                   80500
TIMBAUT                   88500
DRABAUD                   88500
DRABAUD                   88500
DRABAUD                  100000
TIMBAUT                  100000
DRABAUD                  100000
TIMBAUD                  100000
TIMBAUT                  100000
dUBOIS                   110000
DUBOIS                   200000
TIMBAUT                  200000
DUBOIS                   200000
DUBOIS                   200000
DUBOIS12EAU              200000
DUBOI                    200000
DRABAUD                  210500
 
25 rows selected.
Pour avoir le résultat avec le nombre exact de caractères je dois utiliser ^et $ mais cela ne me satisfait pas car c'est du bidouillage et, surtout, cela ne m'explique pas comment fonctionne la syntaxe avec {}.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
USER01@dtx>select nom, salaire from emp where regexp_like ( salaire, '^[0-9]{3}$') order by salaire
NOM                     SALAIRE
-------------------- ----------
FRADUBOIS                   123
Bon, si quelqu'un pouvait m'expliquer ce problème... si c'est la notion de greedy (voracité), merci de me dire comment rendre l'expression régulière non greedy pour la syntaxe {}.