Expression régulière en Perl
Fermé
dianroca
-
22 déc. 2009 à 02:59
{psycho.} Messages postés 101 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 4 septembre 2010 - 22 déc. 2009 à 22:10
{psycho.} Messages postés 101 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 4 septembre 2010 - 22 déc. 2009 à 22:10
A voir également:
- Expression régulière en Perl
- Expression de recherche - Guide
- Expression encoder - Télécharger - Divers Utilitaires
- T'as du ping expression ✓ - Forum Réseau
- Denon perl pro test - Guide
- Modèle fiche expression de besoin excel - Forum Word
3 réponses
{psycho.}
Messages postés
101
Date d'inscription
mardi 22 décembre 2009
Statut
Membre
Dernière intervention
4 septembre 2010
8
22 déc. 2009 à 15:34
22 déc. 2009 à 15:34
Bonjour,
Je pense que ceci devrait passer:
$texte = "Jean Lepigeon";
$texte =~ m/([A-Z]{1}[a-z]+) +([A-Z]{1}[a-z]+)/;
$prenom = $1;
$nom = $2;
$texte = "Jean";
$texte =~ m/([A-Z]{1}[a-z]+)/;
$prenom = $1;
Tiens nous au courant!
Je pense que ceci devrait passer:
$texte = "Jean Lepigeon";
$texte =~ m/([A-Z]{1}[a-z]+) +([A-Z]{1}[a-z]+)/;
$prenom = $1;
$nom = $2;
$texte = "Jean";
$texte =~ m/([A-Z]{1}[a-z]+)/;
$prenom = $1;
Tiens nous au courant!
Salut,
Il ne faut pas oublier les noms, prénoms avec accent.
Pour $texte2 la regex ne reconnait pas le motif.
Pour les accents on peut faire par exemple comme ça
Il ne faut pas oublier les noms, prénoms avec accent.
#!/usr/bin/perl use strict;use warnings; my $texte = "Jean Lepigeon"; my($prenom,$nom) = $texte =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/; print "$nom\n$prenom\n"; my $texte2 = "Eléa Aimée"; my($prenom2,$nom2) = $texte2 =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/; print "$nom2\n$prenom2\n"; __END__
Pour $texte2 la regex ne reconnait pas le motif.
Pour les accents on peut faire par exemple comme ça
#!/usr/bin/perl use strict;use warnings; my $texte = "Jean Lepigeon"; my($prenom,$nom) = $texte =~ /([A-Z][a-z]+)\s+([A-Z][a-z]+)/; print "$nom\n$prenom\n"; my $texte2 = "Eléa Aimée"; my($prenom2,$nom2) = $texte2 =~ /([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)\s+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)/; print "$nom2\n$prenom2\n"; __END__
{psycho.}
Messages postés
101
Date d'inscription
mardi 22 décembre 2009
Statut
Membre
Dernière intervention
4 septembre 2010
8
22 déc. 2009 à 22:10
22 déc. 2009 à 22:10
En effet, je n'avais pas pensé aux prénoms / noms avec accent! En tout cas merci lami20j, je ne connaissais pas la syntaxe :
Pour ne pas matcher avec les débuts de phrases, tu peux utiliser le signe '^' pour préciser le début de la chaîne :
Ici, la séquence
my($prenom,$nom) = $texte =~ /.../;
Pour ne pas matcher avec les débuts de phrases, tu peux utiliser le signe '^' pour préciser le début de la chaîne :
my($prenom2,$nom2) = $texte2 =~ /^.+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)\s+([A-Z\xC0-\xDD][a-z\xE0-\xFF]+)/;
Ici, la séquence
^.+indique qu'il y a au moins 1 caractère, n'importe lequel, au début de la chaîne avant le premier match.
22 déc. 2009 à 19:56
Merci j'ai essayé le code et ça marche. Il y a juste un petit défaut. Il prend aussi les mots de début de phrase qui commence toujours par une majuscule. Par exemple s'il existe la chaine "Hello Lemarchand Pierre" dans le fichier, il me renvoi "Hello Lemarchand " seulement et donc considére "Hello" comme un nom ou prénom.
Avez-vous une idée la dessus.