Bonjour,
j'utilise les expressions régulières en sas.
je cherche à comprendre pourquoi [0-9]*
Sélectionne une qui chaine commence par un chiffre "0125a"
et pas celle qui commence par un caractère : "a012bc"
merci.
Cordialement
Bonjour,
j'utilise les expressions régulières en sas.
je cherche à comprendre pourquoi [0-9]*
Sélectionne une qui chaine commence par un chiffre "0125a"
et pas celle qui commence par un caractère : "a012bc"
merci.
Cordialement
Bonjour,
le motif [0-9]* représente 0 ou n fois un chiffre de 0 à 9
Tes deux chaines de caractères matchent bien, la première commençant par une occurrence de 0, la seconde commençant par aucune occurrence de 0
Exemple sous le debugger :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DB<13> print 'Match' if '0125a' =~ /^[0-9]*/ Match DB<14> print 'Match' if 'a012bc' =~ /^[0-9]*/ Match
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Merci pour vos réponses.
J'ai mal posé la question.
A partir de la table test, si je matche ces données, en effet les deux enregistrements sortent.
Par contre, si je veux extraire le premier caractère numérique ou plus qui se succèdent, voici les résultats:
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 data test; input var $; cards; 0125a a012bc ;run; data test1 ; set test; length var1 $8.; IF _N_ = 1 THEN RE = PRXPARSE("/[0-9]*/");; retain re; if PRXmatch(RE,var) gt 0 then output; run;
1/ le premier enregistrement revoit dans la variable var1: 0125
2/ le deuxième enregistrement revoit dans la variable var1: vide
Avec [0-9]+, ça fonctionne:
1/ le premier enregistrement revoit dans la variable var1: 0125
2/ le deuxième enregistrement revoit dans la variable var1: 012
Et pour cela que je cherche à comprendre pourquoi avec [0-9]* ne me revoit pas 012.
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 data test1 ; set test; length var1 $8.; if _n_=1 then IF _N_ = 1 THEN RE = PRXPARSE("/[0-9]*/");; retain re; CALL PRXSUBSTR(RE,var,START,LENGTH); IF START GT 0 THEN DO; ZIP_CODE = SUBSTRN(var,START,LENGTH ); output; end; run;
Bonjour,
je vois que ce n'est pas du Perl. Tu n'es donc pas sur la bonne rubrique du forum.
Je répondrai toutefois que l'expression régulière /[0-9]*/ peut reconnaître 0 ou plusieurs chiffres. Si la chaîne commence par un chiffre (par exemple 0125a), la regex reconnaître tous les chiffres du début de la chaîne, donc 0125.
Si la chaîne ne commence pas par un chiffre (par exemple a012bc), la regex /[0-9]*/ reconnaît un motif contenant 0 chiffre en début de chaîne. En utilisant /[0-9]+/, tu garantis que la regex doit reconnaître un ou plusieurs chiffres, donc au moins un chiffre, de la chaîne; la regex reconnaîtra alors 012.
Exemple sous le débogueur en Perl:
Premier test: la chaîne est reconnue par le motif (donc succès de la regex)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 DB<6> print "OK" if 'a012bc' =~ /([0-9]*)/ OK DB<5> print $1 if 'a012bc' =~ /([0-9]*)/
Deuxième test: mais la chaîne capturée est vide
- La programmation fonctionnelle en Perl : 1. Les opérateurs de liste; 2. Les fonctions d'ordre supérieur; 3. Étendre le langage.
- Comment utiliser des décorateurs en Perl: Un tutoriel pour changer le comportement d'une fonction sans en modifier le code source
- De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements; 4. Annexe 1: Ce qui change entre Perl 5 et Perl 6; Annexe 2: Les nouveautés de Perl 6.
- Les regex et grammaires de Perl 6
- Objets, classes et rôles en Perl 6 - Tutoriel de programmation orientée objet
- Tour d'horizon du nouveau langage Perl 6
Partager