Rechercher : dans
Par :

Expressions Regulières PERL

Dernière réponse le 9 oct 2005 à 14:56:01 maxinfos, le 8 oct 2005 à 16:27:37 
 Signaler ce message aux modérateurs

Bonjour,

voilà, je galère sur les expressions regulières en PERL. Je dois faire un petit programme permettant de vérifier qu'une chaine de caractère commence par une majuscule et que la suite de la chaine est en minuscule ... je n'arrive pas à écrire mon expression, j'ai pourtant essayé plusieurs combinaison ...
Voilà une partie du code

$prenom="JeAn";
if($prenom=~([A-Z][a-z]*))
print "Le prenom $prenom est ecrit correctement";
else
print "Le prenom $prenom n'est pas ecrit correctement";

Dans cet exemple, il me dit que le prenom est correctement écrit ...

Meilleures réponses pour « Expressions Regulières PERL » dans :
PHP - Expressions régulières Voir Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Sed - Trucs et astuces VoirSubstitution Affichage Suppression Espace et tabulation Ligne vide Intervalle régulier Divers Joindre des lignes Affichage insensible à la casse Substitution Substituer "foo" par "bar" à chaque ligne Seulement la 1ère...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

kilian, le 8 oct 2005 à 16:56:44

Salut,

En fait l'expression la plus fidèle que j'ai trouvé serait:

^[A-Z]{1}[a-z]+

=>L'expression doit commencer par une majuscule suivie de 1 ou plusieurs minuscules.
Sans l'accent circonflexe au début, il ira chercher ta majuscule partout.
Donc:
if( $prenom =~ "^[A-Z]{1}[a-z]+" )
{
      print ("oui");
}
else
{
      print ("non");
}

Répondre à kilian

2

wiwimagique, le 8 oct 2005 à 18:17:10

Je ne connais pas bien Perl mais il me semble que les expressions régulières sont les même qu'en PHP.

Dans ce cas, ne faudrait-il pas mettre également le caractère de fin de chaîne sans quoi la vérification s'arrête à la 2e lettre ?


^[A-Z]{1}[a-z]+$

Dans sa voiture rouge et jaune

Répondre à wiwimagique

3

maxinfos, le 8 oct 2005 à 19:16:21

L'expression était bien : ^[A-Z]{1}[a-z]+$
Merci à tous les deux !!!!

@+

Répondre à maxinfos

4

maxinfos, le 8 oct 2005 à 19:32:39

J'ai encore une autre question, car j'ai pourtant pris en compte les réponses précédentes, mais je bloque toujours

Cette fois ci, je dois verifier une date de naissance de la forme
(j)j-(m)m-(aa)aa

Donc plusieurs cas possibles :
05-05-1985, 5-5-85, 05-5-85, 5-05-85, 5-5-1985 etc ...

Merci pour votre précieuse aide !!!

Répondre à maxinfos

5

lami20j, le 9 oct 2005 à 14:18:52

Salut,

En ce cas on peut avoir les possibilités suivantes :

Les jours

01 02 03 04 05 06 07 08 09
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

\b(0?[1-9]-|[12][0-9]-|3[01]-)


Les mois

01 02 03 04 05 06 07 08 09
1 2 3 4 5 6 7 8 9
10 11 12
(0?[1-9]-|1[0-2]-)

et pour les année on aura un group de 2 ou 4 chiffres
(\d{2}|\d{4})\b


L'integrale
\b(0?[1-9]-|[12][0-9]-|3[01]-)(0?[1-9]-|1[0-2]-)(\d{2}|\d{4}­)\b


la classe [0-9] tu peux la ramplacer par \d

Voilà un script en perl pour tester
#! /usr/bin/perl -w
use strict;

print "Entrez une date format [ (j)j-(m)m-(aa)aa  ] : \n";
chomp(my $jour = <STDIN>);

if ($jour =~ /\b(0?[1-9]-|[12][0-9]-|3[01]-)(0?[1-9]-|1[0-2]-)(\d{2}|\d{4})\b/){
print "date ok : $1$2$3\n";
}else{
print "Ce n'est pas le bon format [ (j)j-(m)m-(aa)aa ].
       Ou peut être vous avez depassé l'interval des valeurs pour les jours[1-31] ou mois[1-12]\n";
} 


Tu peux utiliser qr// pour mieux maintenir tes regex.

Dans la re je suppose que la date et separée d'autre mots.
Ex:
Date de naissance 01-01-2005 du ........
Mais ça marche dans le cas :

La date de regex et 09-10-2005.

Tu auras le message d'erreur dans le cas où une date est
32-01-2005
01-13-2005
01-01-005
01-01-20005

Je n'ai pas tester toutes les possibilités.

lami20j

P.S. A utiliser en fonction de tes besoins.
Et n'oublies pas TMTOWTDI.

Répondre à lami20j

6

 lami20j, le 9 oct 2005 à 14:56:01

Salut,

Si je peux me permetre un petit conseil concernant les classes de caractères.

^[A-Z]{1}[a-z]+


Une clase des caractères a pour le but de faire reconnaître un caractère parmi les plusieurs.

qu'une chaine de caractère commence par une majuscule et que la suite de la chaine est en minuscule


En ce cas pour reconnaître le 1er caractère en majuscules ça suffit [A-Z].

Le quantificateur d'intervalle {1} est inutile.
^[A-Z][a-z]+$ 


lami20j

Répondre à lami20j