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
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
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.
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.
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
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.
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 {}.
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
Partager